Почему doSmth(() => s)
не компилируется? Почему остальная часть кода выводит «значение»? Есть ли способ вызвать вторую функцию (с параметром «по вызову»)?Функция перегрузки с параметром и функцией по вызову с параметром байта
object Test {
def main (args: Array[String]){
lazy val s: String = ""
doSmth(s)
doSmth("")
doSmth(() => s)
}
def doSmth(p: String): Unit = {
println("value!")
}
def doSmth(p: => String): Unit = {
println("call by name!")
}
}
хорошо, даже с исходной версией кода, 'doSmth (" ")' output "value!" –
Один из вопросов, которые я задавал, могу ли я называть 'doSmth()' и сделать вывод «вызовом по имени!» без изменения исходной функции –
Если у вас есть doSmth, определяемый как вызов как по вызову String, так и вызов по ссылке String, компилятор не может определить, какую версию выполнить. Если в моем примере вторая версия doSmth принимает функцию из единицы в строку, то вы можете выбрать передачу строки или функцию, которая дает строку, компилятор может отличить эту разницу. – mattinbits