有人可以解釋以下對我說:功能VS函數指針
scala> def squared(x: Int) = x * x
squared: (x: Int)Int
scala> val sq : (Int) => Int = squared
sq: Int => Int = <function1>
scala> sq.getClass
res111: Class[_ <: Int => Int] = class $anonfun$1
我明白這一點,到目前爲止,方是一個功能,而平是一個函數指針。
但後來我這樣做:
scala> squared.getClass
<console>:13: error: missing arguments for method squared;
follow this method with `_' if you want to treat it as a partially applied function
squared.getClass
^
爲什麼我不能調用上平方的getClass?畢竟,不是函數第一類對象?爲什麼我需要這樣做才能起作用?
scala> squared(7).getClass
res113: Class[Int] = int
而且我也得到
scala> sq(5).getClass
res115: Class[Int] = int
相同的結果來想想吧,爲什麼
scala>squared(5)
和
scala> sq(5)
產生相同的結果,即使一個是功能,而且其他一個函數指針,而不需要使用不同的語法? 類似於*sq(5)
的東西可能已經更清晰了,不是嗎?
我相信這與def vs val有關。 Def在評估時調用val,當定義時。這可能有更多的信息:http://stackoverflow.com/questions/18887264/what-is-the-difference-between-def-and-val-to-define-a-function –