Сообщение Re: Система типов от 02.12.2014 11:33
Изменено 02.12.2014 11:44 dimgel
Здравствуйте, _NN_, Вы писали:
_NN>Есть ли система типов, которая позволяет переопределить M<U> как U в наследнике ?
_NN>Например имея Nullable<int> в базовом классе , наследник мог бы определить int , тем самым усиливая условия и удовлетворяя требованием базового.
В скале есть весьма узкоприменимый marker trait NotNull:
Узкоприменимость его заключается в следующем... упс, пофиксили оказывается давно уже!
Раньше на строковый литерал ругалось, что мол null это.
_NN>Ну и далее в общем случае имея скажем List<U> определить в наследнике U или явно пустой список.
Можно что-нибудь через implicit conversion замутить наверное. С ходу впрочем не нарисую: я с implicits не настолько дружу.
_NN>Есть ли система типов, которая позволяет переопределить M<U> как U в наследнике ?
_NN>Например имея Nullable<int> в базовом классе , наследник мог бы определить int , тем самым усиливая условия и удовлетворяя требованием базового.
В скале есть весьма узкоприменимый marker trait NotNull:
scala> class C1
defined class C1
scala> class C2 extends C1 with NotNull
defined class C2
scala> val c: C1 = null
c: C1 = null
scala> val c: C2 = null
<console>:9: error: type mismatch;
found : Null(null)
required: C2
val c: C2 = null
^Узкоприменимость его заключается в следующем... упс, пофиксили оказывается давно уже!
scala> def f(s: String with NotNull) {}
f: (s: String with NotNull)Unit
scala> f("hello")
scala> f(null)
<console>:9: error: type mismatch;
found : Null(null)
required: String with NotNull
f(null)
^Раньше на строковый литерал ругалось, что мол null это.
_NN>Ну и далее в общем случае имея скажем List<U> определить в наследнике U или явно пустой список.
Можно что-нибудь через implicit conversion замутить наверное. С ходу впрочем не нарисую: я с implicits не настолько дружу.
Re: Система типов
Здравствуйте, _NN_, Вы писали:
_NN>Есть ли система типов, которая позволяет переопределить M<U> как U в наследнике ?
_NN>Например имея Nullable<int> в базовом классе , наследник мог бы определить int , тем самым усиливая условия и удовлетворяя требованием базового.
В скале есть весьма узкоприменимый marker trait NotNull:
Узкоприменимость его заключается в следующем... упс, пофиксили оказывается давно уже!
Раньше на строковый литерал ругалось, что мол null это.
_NN>Ну и далее в общем случае имея скажем List<U> определить в наследнике U или явно пустой список.
Можно что-нибудь через implicit conversion замутить наверное. С ходу впрочем не нарисую: я с implicits не настолько дружу.
_NN>Есть ли система типов, которая позволяет переопределить M<U> как U в наследнике ?
_NN>Например имея Nullable<int> в базовом классе , наследник мог бы определить int , тем самым усиливая условия и удовлетворяя требованием базового.
В скале есть весьма узкоприменимый marker trait NotNull:
scala> class C1
defined class C1
scala> class C2 extends C1 with NotNull
defined class C2
scala> val c1: C1 = null
c: C1 = null
scala> val c2: C2 = null
<console>:9: error: type mismatch;
found : Null(null)
required: C2
val c2: C2 = null
scala> val c2: C2 = c1
<console>:10: error: type mismatch;
found : C1
required: C2
val c2: C2 = c1
^ ^Узкоприменимость его заключается в следующем... упс, пофиксили оказывается давно уже!
scala> def f(s: String with NotNull) {}
f: (s: String with NotNull)Unit
scala> f("hello")
scala> f(null)
<console>:9: error: type mismatch;
found : Null(null)
required: String with NotNull
f(null)
^Раньше на строковый литерал ругалось, что мол null это.
_NN>Ну и далее в общем случае имея скажем List<U> определить в наследнике U или явно пустой список.
Можно что-нибудь через implicit conversion замутить наверное. С ходу впрочем не нарисую: я с implicits не настолько дружу.