暗黙の
説明
{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++ プログラマへの注意