Этот вопрос тесно связан с моим другим вопросом (и может привести к тому, что я решу его), но определенно отличается.
как разрешить передачу в =› AnyRef и вызвать эту функцию
Я играл с различными созданиями функций, и у меня, честно говоря, возникли проблемы с созданием анонимной функции типа => AnyRef и => String. Я могу создать функцию типа () => AnyRef и () => String, я думаю.
Пример 1 У меня есть следующий код
def debugLazyTest2(msg: => String) : Unit = {
System.out.println(msg)
}
//and client code
val function: () => String = () => {
executed = true
"asdf"+executed+" hi there"
}
log2.debugLazyTest2(function)
но ошибка компиляции говорит, что найдено: () => String, что имеет смысл, но затем говорит «требуется: строка» вместо «требуется: => строка»
Что здесь происходит?
Пример 2, чтобы стать еще более странным, у меня есть этот код, который компилируется, а выше не компилируется
def debugLazyTest(msg: => AnyRef) : Unit = {
System.out.println(msg.toString)
}
//and client code which compiles!!!!
val function: () => AnyRef = () => {
executed = true
"asdf"+executed+" hi there"
}
log2.debugLazyTest(function)
Этот код компилируется, хотя он работает не так, как хотелось бы, поскольку библиотека не может вызвать функцию до вызова toString (это в другом моем потоке и это отдельный вопрос).
Любые идеи относительно того, что здесь происходит?
спасибо, Дин