清除实例变量的方法的命名约定

时间:2014-05-20 16:38:39

标签: ruby

通过方法清除实例变量的良好命名约定是什么。实际值存储在数组中,方法过滤数组以查找值。

以下是我已有的方法:

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?
    !!@data.select { |o| o.attribute == 'Some Value' }.first
  end

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

或者应该是delete_variable!

2 个答案:

答案 0 :(得分: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)?
    !!@data.find { |o| o.attribute == k }
  end

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

通常,其中包含!的方法要么在出现问题时引发异常,要么对某些事物的状态进行永久性修改(例如就地修改方法),要么两者兼而有之。它不是指“重置”或“清除”。

答案 1 :(得分:0)

我没有看到variable!在删除上下文中有意义。带有感叹号的方法的ruby惯用法是该方法对其他东西具有破坏性,是的,但在单个变量的上下文中没有意义。

e.g。 hash.merge!record.save!有道理,但mymodel.field!没有。

我建议使用remove_fieldunset_field之类的名称,或者,如果您要清除倍数,请clear!