Итак, я хочу написать функцию, которая может быть написана так:
{ println(_) } =: thing
Здесь я хочу, чтобы она действительно выполняла thing.=:(println(_))
.Скажем ради аргумента, что =:
имеет следующую реализацию:
def =:(block : Int => Any) {
block(5)
}
Итак, я пытаюсь назвать это так, как показано выше, и получаю:
<console>:10: error: type mismatch;
found : Unit
required: Int => Any
println(_) =: thing
Затем я пытаюсь сделатьэто:
thing.=:(println(_))
Таким образом, я получаю хороший 5
, напечатанный на терминале.Затем я попробовал это:
{ value => println(value) } =: thing
Это снова не удалось и сказал мне, что есть «пропущенный тип параметра».Я предполагаю, что это потому, что Scala пытается сначала разобрать / скомпилировать аргумент функции в этом случае и не угадывает тип, как это было бы (я полностью догадываюсь здесь), когда он вызывается более обычным способом (соператор точки).
Может ли кто-нибудь пролить больше света на проблемы здесь, а также, может быть, предложить лучший способ достичь чего-то близкого к моей первоначальной цели?
PS Извините за название.Я переименую его, как только у меня появится лучшее понимание проблемы.