Иногда можно было бы объявить x
тем же самым типом, что и y
. С vals
тип вывода обрабатывает это очень хорошо, но это не работает в некоторых других областях, например with function types.Почему у Scala нет указателя?
Решение, которое кажется очевидным для программиста с опытом C++, будет decltype. В нынешней Скале такого объекта нет.
Ответ на вопросы, связанные говорит:
, потому что типы не являются гражданами первого класса
Я должен признать, что я не понимаю этого. Я не думаю, что типы являются гражданами первого класса на C++, но все же он может иметь decltype
. Я не спрашиваю ни о чем, как decltype
для параметров типа в дженериках или что-то в этом роде (я понимаю, что дженерики не являются шаблонами и типы стираются в них). Тем не менее, я думаю, что оператор, который позволил бы мне использовать тип выражения в месте, где ожидается тип, - конечно, компилятор должен иметь возможность оценивать тип выражения, иначе определение типа для определения val
было бы невозможным.
decltype
может быть использован, как показано ниже - код не пытается сделать что-нибудь что-нибудь полезное, только чтобы показать синтаксис и основные способы использования:
case class A(x:Int = 0)
val a = new A(10)
val b = new decltype(a)
def f(c:decltype(a)) : decltype(a.x+a.x)
является отсутствие decltype
осознанное решение, или есть некоторые конкретные причины, по которым Scala не может это иметь? Возможно ли какое-то решение, использующее отражение времени компиляции, которое позволит это?
Как 'b' вступают в игру здесь ? –
@ m-z b здесь, как пример. В этом конкретном случае это будет то же самое, что и val b = a, но легко представить себе аналогичный случай, когда он не будет одинаковым. Я попытаюсь обновить вопрос. – Suma
Я не понимаю вопроса. Типичные подписи - это время компиляции, поэтому вы должны иметь возможность указать тип статически. Тогда что дает вам эта «декларация»? Каков «недостаток» регулярных «val b: A = a» и «def f (c: A): A'? –