2014-05-20 239 views
3

通過方法清除實例變量的良好命名約定是什麼?實際值存儲在一個數組中,方法過濾數組以找到值。清除實例變量的方法的命名約定

這裏有方法,我已經有了:

class Foo 

    def initialize 
    # Array of objects 
    @data = [] 
    end 

    # Get the variable or default value 
    def variable 
    @data.select { |o| o.attribute == 'Some Value' }.first || 'Default Value' 
    end 

    # Does the variable exist 
    def variable? 
    [email protected] { |o| o.attribute == 'Some Value' }.first 
    end 

    # Does this make sense? 
    def clear_variable! 
    # Delete the variable 
    end 
end 

還是應像delete_variable!

+0

有趣的問題。我有一個關於它的問題:)什麼? :P(我顯然不知道Ruby,但這看起來很有趣)。 – Mzn

+0

在Ruby中,您不能刪除任何變量,而是可以清除它。 –

+0

您需要調用'@ data'並將其放入'initialize'方法中,以便實際工作。 – tadman

回答

3

如果您正在創建類似的東西,最好模擬Ruby中最類似結構中使用的常規方法名稱。在這種情況下,它的哈希:

class Foo 
    def initialize 
    @data = [ ] 
    @default = 'Default Value' 
    end 

    def [](k) 
    found = @data.find { |o| o.attribute == k } 

    found ? found.value : @default 
    end 

    def has_key(k)? 
    [email protected] { |o| o.attribute == k } 
    end 

    # Does this make sense? 
    def delete(k) 
    @data.reject! { |o| o.attribute == k } 
    end 
end 

一般在它與!的方法或者如果出現錯誤引發的例外,它使一個永久修改的一些國家(如就地改性方法),或兩者。這不是意味着「重置」或「清除」。

+0

第一部分不完全符合我的要求。原因是因爲我正在尋找一個數組中的特定對象。最後一個可能會起作用。 – screenmutt

+0

你使用對象數組作爲某種鍵值存儲的方式並不是特別有效。可能值得將'@ data'轉換爲Hash,在內部使用它,並以任何您需要的格式導出它。在大型列表中進行線性搜索非常緩慢。 – tadman

+0

它實際上不是一個大的列表。該列表存儲了與父對象關聯的大量小部件(任意名稱)。可以有任何數量的這些小部件,並且可以有重複。散列會有些尷尬。 – screenmutt

0

我沒有看到variable!在刪除上下文中有意義。具有感嘆號的方法的紅寶石成語是該方法對其他東西做了破壞性的事情,是的,但在單個變量的情況下它沒有什麼意義。

例如hash.merge!,record.save!是有意義的,但mymodel.field!沒有。

我會建議一個名稱,如remove_fieldunset_field或者,如果您要清除倍數,clear!