« [Linux] 結局 i3 に落ち着いた | トップページ | [本] 久々にミステリーじゃない小説を読んだ »

2012年11月 9日 (金)

[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 のキーワード引数は、キーワードに大文字で始まるキーワードを指定できないっぽい。 まあ、そりゃそうだろうな。

|

« [Linux] 結局 i3 に落ち着いた | トップページ | [本] 久々にミステリーじゃない小説を読んだ »

コメント

この記事へのコメントは終了しました。

トラックバック


この記事へのトラックバック一覧です: [Ruby] Win32OLEのキーワード引数(じゃなくってそれっぽく見えるもの):

« [Linux] 結局 i3 に落ち着いた | トップページ | [本] 久々にミステリーじゃない小説を読んだ »