« ボウリング進歩無し。退化も無し、多分 | メイン | システム管理者の日 »

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

うーん、これは明らかに無駄なコード過ぎ。せっかく、クラス自分で定義してオブジェクト指向とか楽しんでたのに、どっちらけ。

投稿者 Songmu : 2008年7月23日 01:28