Вот еще один глупый вопрос scala относительно функций как объектов первого класса в Scala. Мне очень жаль, если это повторение, возможно, так оно и есть.обратитесь к функции scala по имени?
В Python, Lisp, Perl, Scheme, и так далее я привык к созданию функциональных значений и присвоения им имен и передавая их в другие функции, как это в Python:
>>> def yyy(c):
... return c.upper()
...
>>> yyy
<function yyy at 0x1032965f0>
>>> yyy('a')
'A'
>>> def compose(f,g):
... def composition(x):
... return f(g(x))
... return composition
...
>>> compose(ord, yyy)('a')
65
В Скале я не Не знаю, как это сделать, потому что scala всегда хочет оценить функцию, насколько я могу судить. Как вы относитесь к неоцененной функции в scala и передаете ее, сохраняете ее в данных структур и т. Д.?
Например, я не могу сделать это таким образом, по-видимому:
scala> def yyy(c: Char) = {
| c.toUpper
| }
yyy: (c: Char)Char
scala> yyy('a')
res5: Char = A
scala> yyy
<console>:9: error: missing arguments for method yyy;
follow this method with `_' if you want to treat it as a partially
applied function
yyy
^
scala> yyy_
<console>:8: error: not found: value yyy_
yyy_
^
Как вы можете видеть, я попытался и не смог разобраться в «_» намек. Любые подсказки? Как вы относитесь к функции без ее оценки?
вы должны добавить пробелы перед тем _ («ууу _», а не " yyy_ ") – volia17
' yyy' не является функцией, это метод. Вы должны либо преобразовать его в функцию с использованием η-расширения ('yyy _'), либо использовать функцию в первую очередь (' val yyy = (c: Char) => c.toUpper'). –
Возможный дубликат [Разница между методом и функцией в Scala] (http://stackoverflow.com/questions/2529184/difference-between-method-and-function-in-scala) –