2010-07-27 75 views
1

我想通過迭代和檢查有效性來創建各種類型的對象的實例。我需要一組類型,所以我可以做這樣的事情:紅寶石中的類型數組

def tryClasses(in) 
    types = [Foo::A, Foo::B, Foo::C] 

    types.each do |type| 
     a = type.new(in) 
     return a != null 
    end 
end 

如何創建和類類型的數組? 這樣做,這樣我得到一個NoMethodError(未定義的方法「A」爲富)

+0

你希望函數的行爲如何?填充數組並生成類很好。你想讓它返回新成功的第一堂課嗎? – 2010-07-27 15:47:53

+0

我剛剛意識到你的意思。是的,爲了學習的目的,我只是希望它在創建A B或C的有效實例時返回true。 – willoller 2010-07-27 15:54:41

+0

什麼是'tryClasses(in)',誰是那個'end'在最後? – 2010-07-27 16:10:03

回答

4

除了明顯的語法錯誤(例如in是一個有限公司Reseved詞,null在Ruby的拼寫nil),則顯示的代碼應該正常工作,事實上,當我複製&時,它會將其粘貼到我的Ruby安裝中。當然,這假設類別Foo::AFoo::BFoo::C實際上存在。如果他們不這樣做,那麼代碼顯然不可能工作。

它是,但是,完全未Rubyish,違反書中幾乎每一個編碼約定:

  1. 縮進2個空格
  2. 方法名稱snake_case,不camelCase
  3. 明確檢查等於nil是一個不可否認的,簡單地稱#nil?是非常優選的
  4. try_classes並不完全是一個意圖揭示方法名稱
  5. 和WTF確實是in是什麼意思?
  6. Ruby開發者更喜歡更高階的方法在明確循環

這裏是你寫的代碼更Rubyish版本:

def can_create_object?(*args) 
    [Foo::A, Foo::B, Foo::C].none? do |klass| 
    klass.new(*args).nil? 
    end 
end 

但是請注意,我非常確信,整個思路是根本上有缺陷。

+2

哈哈好吧 - 你已經讓我重新審視了我最初的假設。我會在另一天再回來一個更好的問題! – willoller 2010-07-27 17:28:30