5

私は Scala の学習の初期段階にあり、メソッドを宣言するさまざまな方法に気付きました。

等号を使用しないとメソッドがvoidメソッドになり (Unit値の代わりに a を返す)、等号を使用すると実際の値が返されることを確認しました。

def product(x: Int, y: Int) {
  x*y
}

()(Unit)を返しますが、

def product(x: Int, y: Int) = {
  x*y
}

2 つの引数の積を返します( x*y)

メソッドを宣言する 3 番目の方法、つまりコロンを使用することに気付きました。ここに例があります

def isEqual(x: Any): Boolean

=これは表記法とどう違うのですか?また、代わりにこの方法を使用するのは、どのような状況で最適でしょうか?

4

6 に答える 6

12

コロンを使用する (および equal を使用する) 場合は、メソッドの戻り値の型を明示的に定義します。

// method return Boolean value
def m(a : Int) : Boolean = a > 0 

コロンを使用せずに equal を使用すると、scala コンパイラが戻り値の型自体を推測できるようになります。

// method has return type of last expression (Boolean)
def m(a : Int) = a > 0 

コロンもイコールも使用しない場合、メソッドの戻り値の型は Unit クラスになります。

// method has Unit return type
def m(a : Int){ 
    a > 0 
}
于 2014-10-31T08:14:39.500 に答える
1

戻り値の型が必要ない場合は、使用しました

scala> def product(x: Int, y: Int) { //in lack of = it explicit uses Unit 
     |   x*y
     | }
product: (x: Int, y: Int)Unit
//equivalent to below
scala> def product(x: Int, y: Int):Unit={ 
     |   x*y
     | }
product: (x: Int, y: Int)Unit

そしてあなたが書くとき

scala> def product(x: Int, y: Int) = {  //here it explicit detect return type
     |   x*y
     | }
product: (x: Int, y: Int)Int
//equivalent to below
scala> def product(x: Int, y: Int):Int = {
     |   return x*y
     | }
product: (x: Int, y: Int)Int
于 2014-10-31T08:24:53.200 に答える
0

def foo(arg) { sideEffects() }と同等def foo(arg) = { sideEffects(); Unit }です。意図を隠してしまうスタイルの悪さです。(欠落しているを見落とすのは簡単=です)。使用しないことをお勧めします。

def foo(arg) = { expression }式の型に暗黙的に解決されるメソッドであり、優れたスタイルです。

def foo(arg): Type明示的な型を持つ抽象メソッド定義です。実装が提供されていないため、他の 2 つの例と同等ではありません。

于 2014-10-31T08:45:08.760 に答える
0

Scala では、関数は次のように定義されます。

def product(x: Int, y: Int): Int = {
  x*y
}

しかし、使える「ショートカット」が少ない

  1. scala には適切な型推論があるため、型を省略できます (関数が再帰型でない限り)。

    def product(x: Int, y: Int) = { x*y }

  2. すべては表現です。したがって、関数は値を返す必要があります。コード ブロックの最後の行が戻り値です。したがって、中かっこ {} を使用すると、最後の行が返されます。関数に 1 行しかない場合は、角かっこは必要ありません。

    def product(x: Int, y: Int) = x*y

  3. すべてが値を返す必要があるため、「値なし」は実際にはUnit. したがって、意味のある値を返したくない場合 (つまり、何らかの副作用があることを意味します)、戻り値として Unit を使用します。

    def product(x: Int, y: Int): Unit = x*y

  4. 等号なしで関数を使用することは、Unit を返すもう 1 つの方法です (これは「手続き構文」とも呼ばれます。

    def product(x: Int, y: Int) { x*y }

于 2014-10-31T09:20:16.880 に答える