2017-07-18 9 views
1

この2つのタイプの関数定義が互いにどのように異なるか説明できますか?その構文だけ?または、物事は関数定義Scalaで

アプローチこれら2つの関数は全く異なる2

def incriment=(x:Int) =>x+1 
+0

'val'は' val incr:(Int => Int)=(x:Int )=> x + 1'この構文は、パラメータの型と戻り値の型を定義し、コードを提供することに注意してください。 – Paul

答えて

0

1つの

def incriment(x:Int):Int = x+1 

アプローチ...私は考えていますよりも大きくなっています。

Re。 1

def incriment(x: Int) : Int = x + 1 

これはちょうどIntを返す関数です。

Re。 2

def incriment = (x: Int) => x+1 
def incriment : (Int) => Int = (x:Int) => x+1 

この1つはIntを取り、Int(Int) => Int)を返す関数を返す関数です。私は物事を明確にするために型注釈を追加しました。 Scalaではこれを省略することができますが、追加することをお勧めします(例:パブリックメソッドなど)。

1

ScalaのREPLはあなたの友人、

最初の1、は単に入力としてint型を取り、リターンが戻り値の型としてをint型の方法です。

scala> def increment1(x:Int): Int = x + 1 
increment1: (x: Int)Int 
      |  | 
      input  return type 

および方法は、入力を提供しなければならない、

scala> increment1 
<console>:12: error: missing arguments for method increment1; 
follow this method with `_' if you want to treat it as a partially applied function 
     increment1 

scala> increment1(89) 
res3: Int = 90 

第一はINT取ると戻る

scala> def increment2 = (x:Int) => x + 1 
increment2:    Int => Int 
          |   | 
         func input func return type 

//you can pass this function around, 

scala> increment2 
res5: Int => Int = <function1> 

にint型機能を返すメソッドあります関数を呼び出すと、applyメソッドを呼び出すことができます。

scala> increment2.apply(89) 
res7: Int = 90 

// or you can simply pass parameter within paren, which will invoke `apply` 

scala> increment2(89) 
res4: Int = 90 

もScalaでWhat is the apply function in Scala?

1

を読んで型推論がシンプルであれば、我々は戻り値の型を省略することができます。

def increment(x: Int) : Int = x + 1 

は整数を返す関数であるが、第2のアプローチで

を(整数の引数をインクリメント):第1のアプローチでは

def increment = (x:Int) =>x+1 

これは実際に返す関数であります別の機能。 返された関数は、整数を渡し、インクリメントされた整数を返すことによって呼び出すことができます。