В коде ниже, какова классификация (или техническое имя) использования символа подчеркивания?Каково использование _ в Int => Int = _ + 1
scala> def f: Int => Int = _ + 1
f: Int => Int
scala> f(2)
res0: Int = 3
В коде ниже, какова классификация (или техническое имя) использования символа подчеркивания?Каково использование _ в Int => Int = _ + 1
scala> def f: Int => Int = _ + 1
f: Int => Int
scala> f(2)
res0: Int = 3
От Functional Programming in Scala
... иногда называют подчеркивание синтаксиса для функции буквального, мы даже не потрудившись назвать аргумент функции, используя _ представляют единственный аргумент. При использовании этого обозначения, мы можем только ссылаться на параметре функции один раз в теле функции (если мы снова упомянуть _, это относится к другому аргументу функции)
В вашем случае делать:
def f: Int => Int = _ + 1
бы то же самое, как это:
def f: Int => Int = x => x + 1
, который может показаться излишним, но становится очень удобно для передачи анонимных функций выше упорядоченные функции (которые являются функциями, которые принимают функции в качестве аргументов):
def higherOrder(f: Int => Int) = { /* some implementation */ }
// Using your function you declared already
higherOrder(f)
// Passing an anonymous function
higherOrder((x: Int) => x + 1)
higherOrder((x) => x + 1)
higherOrder(x => x + 1)
// Passing an anonymous function with underscore syntax
higherOrder(_ + 1)
Думай о нем, как на вход, который будет поставляться по вызывающему
scala> def incrementByOne: Int => Int = _ + 1
incrementByOne: Int => Int
Что йо получить обратно функция, которая принимает Int
и возвращает Int
.
X => Y
В обратном типа обозначает функцию, которые принимают тип X
в качестве входного и возвратного типа Y
в качестве выхода. теперь X
и Y
могут быть любые типы.
Чтобы завершить пример, вы могли бы назвать его как
scala> incrementByOne(10)
res0: Int = 11
scala> incrementByOne(99)
res1: Int = 100
scala>
который принял Int
в качестве входных данных (10
и 99
) и возвращенного Int
в качестве выходного сигнала (11
и 100
)
благодарит за разъяснения. Я искал синтаксическое «имя», когда подчеркивание используется таким образом в анонимной функции. Из ссылки, указанной в 1-м посте. [Что все используются для подчеркивания в Scala?] (Http://stackoverflow.com/questions/8000903/what-are-all-the-uses-of-an-underscore-in-scala). Он называется «Синтаксис заполнителя». Не очень интуитивно, но это нормально, пока есть имя. – Polymerase
местозаполнителем. См. Http://stackoverflow.com/questions/8000903/what-are-all-the-uses-of-an-underscore-in-scala – YoungSpice