Подтвердить что ты не робот

Scala - Что означает '=> SomeType' означает?

Сегодня я хотел бы спросить, что означает '= > SomeType'. Я нашел, что он используется в в этой статье. Это в части "Последовательный комбинатор".

Спасибо за любой ответ!

4b9b3361

Ответ 1

Это означает блок кода, который вы можете запустить.

Итак, например:

scala> def doTwice(op: =>Unit) = {op; op}
doTwice: (op: => Unit)Unit

scala> doTwice({println("Hi")})
Hi
Hi

В этом случае =>Unit есть {println("Hi")}

Здесь "SomeType" - это Unit, потому что println не создает значение. Если он произвел Int, это будет =>Int.

Ответ 2

Это указывает на две вещи. Во-первых, из-за префикса => он указывает, что параметр будет передан по имени. Затем он указывает, что тип переданного параметра должен быть SomeType.

Некоторые люди объединяют эти два, думая, что => SomeType - это сам тип - это не так. Это соединение двух вещей: стратегия оценки параметров и тип параметра.

Итак, краткое объяснение по вызову по имени, если ссылка на wikipedia не прояснила ситуацию, если у вас есть это:

def f[A](x: => A) = { x; x }
f(some stuff)

Затем Scala выполнит это следующим образом:

{ some stuff; some stuff }

При вызове по значению происходит следующее:

val x = some stuff
{ x; x }

Обратите внимание, что параметр всегда оценивается по вызову по значению, но только один раз. При вызове по имени этот параметр никогда не может быть оценен (если он, например, на нерабочем ветки if), но может быть оценен много раз.

Ответ 3

Это просто тип значения функции, который не принимает никаких параметров. Owen пример крут, просто знайте, что "A = > B" - это функция с параметром, который имеет тип A, а возвращаемое значение с типом B и "= > B" - это функция, которая не принимает параметров и возвращает значение с типом B.