shared T f<T>(T t){
return t;
}
一個錫蘭頂級功能我預計像
mod.f_.f[Integer](1)
Scala中,其中[Integer]
是類型參數的工作。但它不接受類型參數。
又爲何斯卡拉看到一個getter,而不是一個功能
shared Integer(Integer) fi = f<Integer>;
我預計 整數(整數) 到足以告訴編譯器揭露一個函數階。
shared T f<T>(T t){
return t;
}
一個錫蘭頂級功能我預計像
mod.f_.f[Integer](1)
Scala中,其中[Integer]
是類型參數的工作。但它不接受類型參數。
又爲何斯卡拉看到一個getter,而不是一個功能
shared Integer(Integer) fi = f<Integer>;
我預計 整數(整數) 到足以告訴編譯器揭露一個函數階。
錫蘭實際上應該滿足類型安全的要求,以安全的方式處理空值。但它不在運行時。
所以,有一個很簡單的問題的答案:
scala> mod.f_.f(null,3).
那真的很有趣。
當然,也有更多的方式來獲得樂趣:
scala> implicit def f(x:Any):com.redhat.ceylon.compiler.java.runtime.model.TypeDescriptor = com.redhat.ceylon.compiler.java.runtime.model.TypeDescriptor.klass(x.getClass)
scala> mod.f_.f(List(),3)
scala> mod.f_.f(List,3)
scala> mod.f_.f(Float,3)
...
我不知道斯卡拉,所以我只能幫了與Java的一部分,但這裏是你如何從Java調用該函數:
f_.f(Integer.$TypeDescriptor$, Integer.instance(1))
或:
f_.<Integer>f(Integer.$TypeDescriptor$, Integer.instance(1))
錫蘭功能被泛化的泛型,所以類型參數變成常規參數,並且你必須提供類型參數的類型描述符對象。錫蘭類和接口有一個靜態的$TypeDescriptor$
成員,你可以使用它;我不知道其他東西(Java類,聯合類型和交集類型......)如何在我的頭腦中工作,但是您可以在Ceylon中編寫等效的調用,並通過編譯--verbose=code
來查看生成的Java代碼。
這裏是一個完整的,工作與你的f
功能和G
調用它的Java類例如:gist
@邁克爾您可以用'TypeDescriptor.klass(Whatever.class)'得到'TypeDescriptor'爲Java或斯卡拉類'不管'。 –
您如何期待錫蘭以更安全的方式處理此處的空? 錫蘭的類型系統適用於編譯時,而不是在運行時從Ceylon外部訪問Ceylon函數。 –
您如何期望用戶以安全的方式處理null?例如。編程! – Michael