scala-Basics:メソッドと関数の違い

簡単な説明


OOPのメソッド(メソッド)、メソッドはオブジェクトに作用し、オブジェクトの動作です。Javaのメソッドは同じです。Scala(メソッド)のメソッドも同じです。メソッドの基本形式を定義します
。defメソッド名(パラメーターリスト):戻り値=メソッド本体

Scalaの関数(関数)
、関数は一流の市民と見なされ、関数の基本形式を定義します:
val f1 =(x:Int)=> println(x)//
valを出力f2 =(x1:Int)=> x1 + 4 // + 4元のデータ

いくつかの例

scala> def add3(x:Int) = x + 3
add3: (x: Int)Int // 表示Method add3有一个参数Int型参数x,返回值是Int型.

scala> add3(3)
res0: Int = 6

scala> val f1 = (x:Int) => x + 3
f1: Int => Int = <function1> // 表示Function f1的method体接受一个Int型的参数,输出结果的类型是Int型。f1的类型是function1

scala> f1(3)
res1: Int = 6

違い

  • パラメーターリストはメソッドではオプションであり、関数では必須です(関数パラメーターリストは空でもかまいません)。
scala> def method = println("没有参数的方法")
method: Unit

scala> val function = () => println("没有参数的函数") // f2: () => Unit = <function0>
scala> val function = => println("没有参数的函数") // 编译错误,参数列表可以为空,但不能省略
  • メソッド名はメソッド呼び出しを意味し、関数名は単に関数自体を表す
scala> method
没有参数的方法

scala> function
res10: () => Unit = <function0>
  • 関数が必要な場所にメソッドを提供できます(自動的に関数に変換され、この動作はETA拡張と呼ばれます)。
// 高阶函数foreach接收的是一个函数,但也可以传入一个方法,scala会将这个方法自动转义成函数。
// foreach是List对象的一个高阶函数,它接收一个函数,并应用于List中的每一个元素,而method是一个方法。
def method(x: Any) = println(x)
val list = List[String]("Scala", "Spark", "Java")
list.foreach(method(_))

注:
関数が必要な場合は、メソッドを使用できます。
関数が予期されない場合、メソッドは自動的に関数に変換されません。

演算子はscalaではメソッドとして解釈されます:

プレフィックス演算子:op objはobj.opとして解釈されます
インフィックス演算子:obj1 op obj2はobj1.op(obj2)として解釈され
ますサフィックス演算子:obj opはobj.opとして解釈されます

メソッド名の後にアンダースコアを追加して、関数に強制できます。注:メソッド名とアンダースコアの間に少なくとも1つのスペースがあります!

scala> def method1(x:Int) = { x + 84 }
method1: (x: Int)Int

scala> val function1 = method1 _
function1: Int => Int = <function1>

scala> function1(3)
res5: Int = 87

scala>

おすすめ

転載: www.cnblogs.com/duchaoqun/p/d56aa807f7d592fc598bf8b5c7d8a8e6.html