[解決済み] Scalaのリターン
質問
私はscalaの初心者のプログラマーですが、奇妙な動作に遭遇しました。
def balanceMain(elem: List[Char]): Boolean =
{
if (elem.isEmpty)
if (count == 0)
true;
else false;
if (elem.head == '(')
balanceMain(elem.tail, open, count + 1);....
上記のように、基本的には
elem.isEmpty
と
count == 0
. そうでなければ、falseを返したい。
さて、上記で、scalaではreturn文を追加する必要はないと読みました。そこで、私は
return
上記のように しかし、これはブール値を返しません。もし、returnステートメントを
return true
.完全に動作します。なぜでしょうか?
また、なぜscalaでreturn文があるのはバッドプラクティスだと考えられているのでしょうか?
どのように解決するのですか?
を省略すればいいというような単純なものではありません。
return
キーワードを使用します。 Scalaでは、もし
return
の場合、最後の式が戻り値とみなされます。 したがって、最後の式が返したいものであれば
return
キーワードを使用します。 しかし、もしあなたが返したいものが
ではなく
という最後の式がある場合、Scala
を返したかったことがわからなくなります。
.
一例です。
def f() = {
if (something)
"A"
else
"B"
}
ここでは、関数の最後の式である
f
はStringとして評価されるif/else式です。 明示的な
return
がマークされている場合、Scala はこの if/else 式の結果である String を返したかったのだと推測します。
では、次に の後に は、if/else 式です。
def f() = {
if (something)
"A"
else
"B"
if (somethingElse)
1
else
2
}
さて、最後の式はIntとして評価されるif/else式である。 したがって
f
はIntになります。 もし本当に文字列を返して欲しかったら、困ったことにScalaには
ノーアイディア
というのは、私たちの意図するところです。 したがって、Stringを変数に格納して2番目のif/else式の後で返すか、Stringの部分が最後になるように順序を変更することで修正する必要があります。
最後に
return
のようなネストされたif-else式でも、キーワードを使用することができます。
def f() = {
if(somethingFirst) {
if (something) // Last expression of `if` returns a String
"A"
else
"B"
}
else {
if (somethingElse)
1
else
2
"C" // Last expression of `else` returns a String
}
}
関連
-
[解決済み] JavaScriptで複数の値を返す?
-
[解決済み] Scalaのオブジェクトとクラスの違い
-
[解決済み] メソッド呼び出し元へ複数の値を返す
-
[解決済み】Scalaにおける中括弧と括弧の正式な違い、また、どのような場合に使用すべきなのか?
-
[解決済み】タイプセーフのenum型をモデル化する方法は?
-
[解決済み】Scalaで`:_*`(コロン・アンダースコア・スター)は何をするのですか?
-
[解決済み】ScalaでVectorを選択するのはどんなとき?
-
[解決済み】Scalaのyieldとは何ですか?
-
[解決済み】Scalaの名前による呼び出しと値による呼び出し、明確化の必要性
-
[解決済み] マクロから匿名クラスのメソッドを持つ構造型を取得する
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] Scala underscore - ERROR: 展開された関数のパラメータ型が見つかりません。
-
[解決済み] ScalaのSeqへのアペンド
-
[解決済み] AWSのためのScala SDKまたはインターフェースはありますか?
-
[解決済み] Scala 無名クラスでextendsを使用する方法
-
[解決済み] TimeoutExceptionが発生した場合、どのような原因が考えられるでしょうか。Sparkで作業しているときに[n秒]後にFuturesがタイムアウトしました[重複]。
-
[解決済み] MapのmapValuesとtransformの違いについて
-
[解決済み】ScalaのHigher kinded typeとは何ですか?
-
[解決済み】タスクがシリアライズされない:オブジェクトではなくクラスに対してのみクロージャの外で関数を呼び出すとjava.io.NotSerializableExceptionが発生する
-
[解決済み】Scala 2.8 breakOut
-
[解決済み】Scalaでケースクラスのインスタンスをクローンして、1つのフィールドだけを変更するにはどうすればよいですか?