2009-02-27 8 views
4

Ruby 1.8を使用しています。 WIN32OLEモジュールの使用 -Ruby win32ole - OLEクラスがメソッドをサポートしているかどうか、OLEクラスの型を調べる方法

1)OLEオブジェクトインスタンスのクラス名を特定するにはどうすればよいですか? 2)オブジェクトインスタンスが特定のメソッドをサポートしているかどうかをどのように確認できますか?

Outlookの自動化スクリプトで、21日以上経過した「削除済みアイテム」フォルダ内のアイテムを削除しようとしています。メールアイテムの場合、ReceivedTimeプロパティを使用しますが、そのためにはアイテムが実際にMailItemインスタンスであるかどうかを確認する必要があります。第二のために

、私が思い付くことができた最高のは、(本当に遅い)です:

def MethodExists(obj, methodName) 
    obj.ole_methods.each{|method| 
    if (method.name == methodName) 
     return true 
    end 
    } 
    return false 
end 

答えて

7

特にWIN32OLE objecについてts ...

OLEオブジェクトインスタンスのクラス名を特定するにはどうすればよいですか?

object.ole_obj_help.name 

どのようにして、オブジェクトのインスタンスは、特定のメソッドをサポートしているかどうかを伝えることができますか?

object.ole_methods.collect!{ |x| x.to_s }.include?('MethodName') 
+1

では動作しませんか? {| x | x.to_s == "MethodName"}は少し簡潔です。または#detect、それも良いでしょう。 –

+0

@MikeWoodhouse:このコードは[このリンク](http://rubyonwindows.blogspot.com/2009/02/win32ole-objects-class-names-and.html)からのものです。私は個人的に 'ole_methods.collect(&:to_s)'を実行します(つまり、あなたがRuby 1.8.6を使わない限り、bangは使用せず、Symbol#to_procを使用します)。 –

-3
  1. obj.class

  2. if obj.respond_to?(methodName) 
        #do your work 
    end 
    
+1

1)WIN32OLE - 役に立たない 2)は私がobject.ole_methods.any考えるole_methods –

関連する問題