2014-05-20 129 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!