暗黙の
説明
{define-class A {constructor implicit {default val:String}} } let a:A = "hi" || invokes {A.default "hi"} "hi" asa A || invokes {A.default "hi"} let a:A = 42 || bad assignment
{define-class B {constructor implicit {default}} } let b1:B = {B} || explicit initialization let b2:B || implicitly initialized using {B.default} let b3:#B || implicitly initialized to null
注意事項
{define-proc {get-a-string}:StringInterface ...} let a:A = {get-a-string} || (1) error set a = {{get-a-string}.to-String} || (2) ok set a = {get-a-string} asa A || (3) ok, explicit cast {with-compiler-directives allow-implicit-downcasts? = true do set a = {get-a-string} || (4) ok, check disabled }
例
例 | |
{define-class public PhoneNumber field number:StringBuf {constructor implicit public {from-int64 val:int64} set self.number = {StringBuf val} } {constructor implicit public {from-StringBuf val:StringBuf} set self.number = val } {constructor implicit public {from-string val:StringInterface} || could validate number here, strip punctuation, etc. set self.number = {StringBuf val} } {constructor implicit public {default} set self.number = {StringBuf "?"} } } {let n1:PhoneNumber = 6177611200} || invokes from-int64 n1.number == {value n1.number} {let n2:PhoneNumber = "6177611200"} || invokes from-string n2.number == {value n2.number} {let n3:PhoneNumber = {StringBuf "6177611200"} || invokes from-StringBuf } n3.number == {value n3.number} {let n4:PhoneNumber} || initialized with default n4.number == {value n4.number} |
C++ プログラマへの注意