Я относительно новичок в scala-функциях, и я запутался в том, как этот синтаксический сахар действительно работает и когда использовать определенный тип.Scala: функция без аргументов
Я написал 3 функции все, которые должны делать то же самое, но у меня возникают проблемы с пониманием того, почему Function0 по-разному ведут себя
версия 1
val fn1 : (String) => String = System.getProperty(_)
println(fn1("os.name"));
версии 2
val fn2 :() => String = System.getProperty("os.name")
println(fn2());
Версия 2 дает несоответствие типов; найдено: String требуется:() ⇒ снабжать струной, тетивой и т.п.
версия 3
val fn3 =() => System.getProperty("os.name")
println(fn3());
Я понимаю, что для версии 2 уже знает Scala тип возвращаемого System.getProperty, но почему она производит эту конкретную ошибку, почему это делает не позволяйте мне явно указывать тип возврата. Я лично предпочитаю явные типы возвращаемых данных, поэтому мне не нужно погружаться в метод, чтобы увидеть, что он возвращает.
Извините за лат e ответ на это, если вторая функция интерпретируется как «значение, которое является функцией, которая не принимает аргумента и возвращает строку. Не будет ли первая функция считываться аналогичным образом, то есть возвращает функцию, которая берет строку и возвращает строку. Вместо этого компилятор выясняет, что вы муравьем, чтобы вернуть строку, а не функцию. – Asrar