型として null を持つ型パラメーターの概念に頭を悩ませることはできません。私はそれが有用な概念だとは思わない。したがって、クラスの定義は次のようになります。
[indent = 4]
class Pair of G1, G2: Object
_first:G1?
_second:G2?
def insert( first:G1, second:G2 )
_first = first
_second = second
def insert_first( value:G1 )
_first = value
def insert_second( value:G2 )
_second = value
def second():G2
return _second
オブジェクト インスタンスを持つ変数を null に再割り当てする必要がある場合は、次のようになります。
[indent = 4]
init
var pair = new Pair of string,string()
pair = null
ただし、Vala コンパイラは、pair
スコープ外になると逆参照します。したがって、null を割り当てる必要がある理由がわかりません。
null の使用は、理想的には、私の考えでは C ライブラリとやり取りする場合にのみ使用されます。null にアクセスすると、適切にチェックされていない場合、クラッシュ (セグメンテーション違反) が発生する可能性があります。例えば:
init
a:int? = 1
a = null
var b = a + 1
Vala コンパイラには、安全でないコードをチェックする実験的な非 null モードがあります。Vala スイッチを使用して以下をコンパイルすると、次のようになります--enable-experimental-non-null
。
[indent = 4]
init
var pair = new Pair of string,string()
pair = null
次のエラーが表示されます。
error: Assignment: Cannot convert from
null' にPair<string,string>'
結果を理解している場合は、コンパイラにこれで問題ないことを伝えることができます。
[indent = 4]
init
pair:Pair? = new Pair of string,string()
pair = null