2008年7月23日
VBScriptの糞仕様
VBScriptってオブジェクトの中に格納した配列を変更する事が出来ないことに気づいて愕然。いったん格納してしまったら、長さ変更どころか、要素の値変更すら出来ないと言う。
Dim hoge : Set hoge = CreateObject("Scripting.Dictionary")
hoge("fuga") = Array(1,2,3,4,5)
WScript.Echo(hoge("fuga")(0)) '1
hoge("fuga")(0) = 10 '代入してるのに
WScript.Echo(hoge("fuga")(0)) '1
orz
てことで、いったん配列を一時配列に格納しておいて、オブジェクト内配列を破棄してから、一時配列の値を変更して格納しなおせば一応値変更は可能。以下のような感じ。
Dim tmpArr : tmpArr = hoge("fuga")
Set hoge("fuga") = Nothing
tmpArr(0) = 10
hoge("fuga") = tmpArr
WScript.Echo(hoge("fuga")(0)) '10
うーん、これは明らかに無駄なコード過ぎ。せっかく、クラス自分で定義してオブジェクト指向とか楽しんでたのに、どっちらけ。