ruby:在追加到数组之前验证输入

时间:2015-04-27 02:45:29

标签: ruby arrays validation

我有一个ruby类,它有一个Array作为其实例变量之一。我试图找出如何验证正在推送到阵列上的数据。

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

所以我可以通过这种方式声明一个实例并将数据添加到数组中。

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

我尝试创建一个名为things<<(inString)的类方法来处理验证,但这不是有效的语法。那么我可以采取什么方法呢?

2 个答案:

答案 0 :(得分: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 

答案 1 :(得分: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