Ниже представлен небольшой 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?