[Ruby] Win32OLEのキーワード引数(じゃなくってそれっぽく見えるもの)
Ruby 2.0ではキーワード引数がサポートされている。
で、Win32OLE では何かしたかというと今のところ何もしていない。 1.9のときと全く同じ。
次のようなoletest.rbを用意しておいて、Ruby 1.9 と Ruby 2.0 での動作を比較してみた。
require 'win32ole' puts RUBY_DESCRIPTION dict = WIN32OLE.new('Scripting.Dictionary') dict.add(Key:'A', Item:'apple') dict.add(ITEM:'banana', KEY:'B') dict.add(key:'C', item:'cherry') puts dict["A"] puts dict["B"] puts dict["C"]
実行結果は次の通り。
$ c:/usr/ruby2.0pre1/bin/ruby oletest.rb ruby 2.0.0dev (2012-11-01 trunk 37411) [i386-mswin32_100] apple banana cherry $ c:/usr/ruby193p286/bin/ruby oletest.rb ruby 1.9.3p286 (2012-10-12 revision 37165) [i386-mswin32_100] apple banana cherry
これは、キーワード引数じゃなくて、
Ruby では 1. Hashのキーがシンボルのときには、 {:key => 'A'} を {key:'A'} と書くことができる。 2. メソッド呼び出しのときに、最後の引数がHashの場合は、{} を省略できる。
さらに
Win32OLE では 最後の引数がHashのときは、OLEの名前付き引数として扱う。 (Hashのキーが引数の名前、Hashの値が引数の値) このとき、Hashのキーに使うことができるのはStringかSymbolである。 (Win32OLEの中でSymbolは文字列に変換している。)
ということになっているためである。
dict.add({'Key' => 'A', 'Item' => 'apple'})
は、Win32OLEでは、HashのキーにSymbolを使えることから
dict.add({:Key => 'A', :Item => 'apple'})
と書くことができ、Hash のキーがSymbolのときは
dict.add({Key:'A', Item:'apple'})
と書くことができ、最後の引数がHashのときは
dict.add(Key:'A', Item:'apple')
と書くことができ、キーワード引数っぽく見えているのである。
ちなみにRuby のキーワード引数は、キーワードに大文字で始まるキーワードを指定できないっぽい。 まあ、そりゃそうだろうな。
| 固定リンク
この記事へのコメントは終了しました。
コメント