Вот небольшой сеанс Scala, в котором определяются и тестируются некоторые функции:
scala> def test1(str: String) = str + str;
test1: (str: String)java.lang.String
scala> test1("ab")
res0: java.lang.String = abab
работает хорошо.
scala> val test2 = test1
<console>:6: error: missing arguments for method test1 in object $iw;
follow this method with `_' if you want to treat it as a partially applied function
val test2 = test1
^
ой.
scala> val test2 = test1 _
test2: (String) => java.lang.String = <function1>
scala> test2("ab")
res1: java.lang.String = abab
работает хорошо!
Теперь я видел синтаксис _
при складывании (_ + _
и т. д.). Насколько я понимаю, _
в основном означает "аргумент". Таким образом, test1 _
в основном означает функцию с аргументом, который передается test1
". Но почему это точно не то же самое, что просто test1
? Почему есть разница, если я добавляю _
?
Так что я продолжал исследовать...
scala> val test3 = (str: String) => str + str
test3: (String) => java.lang.String = <function1>
scala> test3("ab")
res2: java.lang.String = abab
scala> val test4 = test3
test4: (String) => java.lang.String = <function1>
Здесь работает без _
! В чем разница между функцией def
ed и функцией val
ed?
def
определяет функцию, но это не совсем так, в зависимости от вашего определения функции. т.е. метод возвращает результат, который является функцией его параметров, но метод не является значением функции или объектом функции. Вероятно, было бы полезно различать эти два употребления термина функция. - person Knut Arne Vedaa   schedule 16.02.2011