2015-04-27 85 views
1

我有一個ruby類,它有一個數組作爲它的一個實例變量。我試圖弄清楚如何驗證被推入數組的數據。ruby​​:在追加到數組之前驗證輸入

class Something 
    def things 
    @things ||= Array.new 
    end 
end 

所以我可以聲明一個實例,並以這種方式很容易地添加東西到數組中。

@s = Something.new 
@s.things << "one" 
@s.things << "two" 

我試圖創建一個名爲things<<(inString)的類方法來處理驗證,但這不是有效的語法。那麼我可以採取什麼方法?

回答

0

怎麼樣這個?

class MyThings < Array 
    def << (item) 
    # do your validation with item 
    self.push(item) if item.valid? 
    end 
end 

class Something 
    def things(item) 
    @things ||= MyThings.new 
    end 
end 
1

嘗試類似:

things << data if valid?(data) 

其中valid?是您的驗證方法。

例子:

... 
# will push only when quantity is greater than 0 
def push(quantity) 
    things << item if valid?(quantity) 
end 

private 
    def valid?(number) 
    number > 0 
    end 

如果你想擁有你自己的ThingsArray只是創建一個Array子類並覆蓋推(<<)方法推前進行驗證:

class ThingsArray < Array 
    def << (item) 
    return unless valid?(item) 
    super 
    end 

    private 

    def valid?(item) 
    item > 0 
    end 
end 

class Something 
    def things 
    @things ||= ThingsArray.new 
    end 
end