Bir türün varsayılan değerini döndüren bir Scala işlevi yazmaya çalışıyorum (değer türleri için 0, 0.0, false, '\ 0', vb. Ve referans türleri için null). Ben bu geldi:Scala'da bir tür için varsayılan değeri nasıl edinebilirim?
def defaultValue[U]: U = {
class Default[U] { var default: U = _ }
new Default[U].default
}
ve doğrudan denilen bu iyi çalışıyor iken bu REPL oturumda görüldüğü gibi, bu hatta kendisi jenerik bir işlevi aracılığıyla denilen değer türleri için null döndürür:
Welcome to Scala version 2.8.1.final (Java HotSpot(TM) 64-Bit Server VM, Java 1.6.0_24).
Type in expressions to have them evaluated.
Type :help for more information.
scala> def defaultValue[U]: U = { class Default[U] {var default: U = _ }; new Default[U].default }
defaultValue: [U]U
scala> defaultValue[Boolean] // direct call works
res0: Boolean = false
scala> var res: Any = 0
res: Any = 0
scala> def setRes[U] = { res = defaultValue[U]; defaultValue[U] }
setRes: [U]U
scala> setRes[Boolean] // returns a Boolean, but...
res1: Boolean = false
scala> res
res2: Any = null // ... sets the res variable to null.
Bu durumda neden
- (ve gerçek bir Boole dönmek için yeterli bilgi yoksa neden derleyici/yorumlayıcı şikayet etmiyor);:
birisi bana açıklayabilir ve
- nasıl düzeltebilirim? İşte
ClassManifest'lerle ve silinmeyle eşleştirmenin bir yolunu buldum, ancak hoş görünmüyor. –
Nedeni bahse girmek istemez tip silme değil mi? Her neyse, sadece çok fazla bilinen istenen davranışa sahip olduğunuz için, neden onu kodlamıyorsunuz? Çirkin, evet, ama muhtemelen en verimli. – Raphael