t
не обязательно должно быть значением функции. Это просто любое переданное по имени значение, которое оценивается как Unit
.
Когда вы указываете t
в функции delaying
, вы явно не вызываете функцию, переданную в качестве этого параметра. Указав это, вы заставляете оценивать передаваемый по имени параметр, что означает, что sayhello()
оценивается в этой точке.
Нет причин, по которым вы не можете использовать параметры в функциях в передаваемых по имени параметрах:
def say(word: String) {
println(word)
}
def delaying(t: => Unit) {
println("before call")
t
println("after call")
}
delaying(say("hello"))
Единственный раз, когда вы присоединяете параметры к t
внутри delaying
, это может быть, если его тип возвращаемого значения был (не Unit
, а) типом функции, принимающим параметры.