Ruby 1.8.7 リファレンスマニュアル > ライブラリ一覧 > win32oleライブラリ > WIN32OLEクラス > ARGV
ARGV -> [object]
[permalink][rdoc]直前のメソッド呼び出しの引数を格納した配列です。
OLEオートメーションでは呼び出し先が引数に対して値を設定できます。しかし、 Rubyのメソッド引数は値のみを取るため、そのままでは呼び出し先が設定した 値を参照できません。このような場合、ARGVを参照することで呼び出し先の設 定値を参照できます。
以下のリストは、VBで開発したオブジェクトのメソッド呼び出しを例としてい ます。このメソッド(Accm)は、第1引数で指定した演算を第2引数と第3引数に 適用し、結果を第2引数に設定します。
' VB (OLE Automation server) Public Sub Accm(ByVal Operator, ByRef Accumulator, ByVal Operand) If Operator = "*" Then Accmulator = Accmulator * Operand Else If Operator = "+" Then Accmulator = Accmulator + Operand End If End Sub # Ruby x = 10 obj.Accm '*', x, 11 p x # => 10 …… 呼び出しによって影響を受けない p WIN32OLE::ARGV # => ['*', 110, 11] …… 結果はARGVの対応する引数に反映される obj.Accm '+', 10, 11 p WIN32OLE::ARGV # => ['+', 21, 11]
直前のメソッド呼び出しが例外となった場合、ARGVの設定内容は呼び出し前の 状態が保たれます。つまり、WIN32OLE自身がARGVの内容を消去するのは、メソッ ド呼び出しに成功した場合のみです。このため最後のメソッド呼び出しが引数 にオブジェクトを返すタイプのメソッドだった場合、GCにオブジェクトを回収 させるために、呼び出し側でARGVを消去してください。
' VB (OLE Automation server) Public Sub GetInterface(ByRef obj) Set Obj = New OleObject End Sub # Ruby obj.GetInterface nil # 引数の数を合わせるためダミー引数を指定 WIN32OLE::ARGV.clear # 通常は、後続のメソッド呼び出しによって消去される