2017-08-04 1 views
0

公式のスカラースタイルガイドでは引数なしのメソッドについて述べていますが、副作用がない場合は括弧を省略する必要があるので、string.length string.length()の代わりに。 number.toChar()の代わりにnumber.toCharの場合も同じです。Scala StdIn読み込みメソッド - 正しい使い方(かっこは省略しないでください)

scala.io.StdIn._で読み込みメソッドを検索すると、チュートリアルの多くの例は、読み込みメソッドを呼び出すときにかっこを保持しているようです。

val x = readInt() 
val y = readLine() 

上記の他の例では省略しているが、だから私は、これらのメソッドは実際に副作用があるため、これがされているのだろうか?私はreadIntを書いている人の例をいくつか見てきました。つまり、かっこはありません。そのため、どちらが正しいスタイルなのかを知りたいのです。

+0

これらは副作用があります(ストリームの状態が変化します - 次回呼び出すと別の結果になります)。 「正しいスタイルは何であるか」に関して、それは副作用/かっこのことについて賢明に思う方法にかかっています。 – Dima

+0

@Dimaだから私は結果を返すだけでなく、標準的な入力ストリームを操作しているからですか? toCharとtoIntはどうですか?これらは副作用がないと仮定して括弧を省略しますか? – Tranquility

+0

(少なくとも、標準ライブラリを扱うときは)メソッドの宣言を見るのがよいでしょう。括弧なしで呼び出されるはずのものはそのように宣言されているので、実際には選択肢はありません。 – Dima

答えて

1

明らかに、入力/出力で動作するメソッドは、外部システムの状態を変更するときに副作用があり、結果が異なるたびに呼び出されます。

また、これらのメソッドがScala sources on githubでどのように定義されているかを確認することができます。それらはすべて括弧で囲まれて定義されているので、括弧も使用する必要があります。

toCharのようなメソッドは、状態を変更していないため、副作用がありません。そして、それらはかっこなしで定義されています。Source of class Int

関連する問題