2.5 キャスト

ここまでには明示的に説明はしなかったが、本パッケージではZDDの各種演算および関数に対して与えるデータは その型に応じて自動的に型変換(キャスト)される。 例えば、前節で示した演算2*aは、ZDDオブジェクトである変数aにrubyの整数である2を掛けたものである。 ZDDの乗算演算子*は2つのZDDオブジェクトを引数にとる、この例のように一方がZDDオブジェクトでない場合、 その内容を自動的にZDDオブジェクトに変換する。 すなわち2*aは、内部でZDD::constant(2)*aが実行されることになる。 ここで、constatnt関数は、空のアイテム集合の重みを定義する関数である。

以下の例ではruby文字列"a b"は自動的にZDDオブジェクトに変換される。 内部的には、(a+ZDD::itemset("a b")).show を実行している。

> (a+"a b").show
 a b + a

以下は演算子の引数が二つともrubyのStringオブジェクトであるため、単なる文字列の結合となってしまう。

> s="a b"+"c d"
> p s
"a bc d"