2016-01-23 5 views
7

私はScalaの世界では新しく、式とステートメントの違いは何か、if-elseが式ではなく式に使用される理由を知りたいと思っています。 if-elseに文を使用する方法があれば?Scalaの式と文の違い

+0

"if-else_で文を使用する方法がある場合は_And"どうして? –

+0

@BoristheSpiderだけ好奇心。okよりも不可能な場合 – slavov

答えて

6

EDIT:コメントで@イェルクWミッタークで指摘したように、この答えは、実際には間違っている:statements do exist in the Scala spec

ステートメントブロックおよびテンプレートの一部として発生します。ステートメントは、インポート、定義、または式でも、空でもかまいません。

OPの質問に対する実用的な回答として、私はまだ元の回答を残しています。


がPedantically話すのorignal答えは、Scalaでは文のようなものはありません。定義(例:defclass)と式があります。他の言語でのステートメントと呼ばれるものはすべて単なる表現にすぎません。これは式で、Scalaで

println("hello") 

例えば、多くの人がコンソールに出力し、次の「行」、ステートメントを呼び出します。例えば、それは値を割り当てることができる。この場合

val x = println("hello") 

xはタイプUnitの(unitを発音)値()が割り当てられます。

「理論」を除いて、常に()という文を返す式を呼び出すのが一般的です。つまり、上記のprintln("hello")も声明と考えることができます。

今度はif/elseに戻りましょう。すべてが表現であるため、このif/else式である:

if (cond) 3 else 5 

そのように

if (cond) 
    println("hello") 
else 
    println("bye") 

後者の例では、しかし、if/elseは常に返す()である(なぜなら、両方printlnの戻り())したがって、このif/elseというステートメントを呼び出すことができます。

+0

私は2時間前に同じ行に沿って答えを書いた後、リンクでそれを修正するためにSLSを開きました。そして、驚くべきことにステートメントとステートメントシーケンスの定義が仕様に見つかりました: -/ –

+0

リンクやセクション番号を入力してください。 – sjrd

+0

nvm、「em:http://www.scala-lang.org/files/archive/spec/2.11/06-expressions.html#statementsこれは...驚くような^^ – sjrd

0

ステートメントはより必須であり、式はより機能的です。それがあなたが探しているものなら。ステートメントは代入と似ているため、 "val"ではなく "var"と同じで、値を出力しないので、値を取得するにはprintln(s "...")が必要です。一方、式はすぐに値を生成し、型を持ちます。

関連する問題