我有一个ruby类,它有一个Array作为其实例变量之一。我试图找出如何验证正在推送到阵列上的数据。
class Something
def things
@things ||= Array.new
end
end
所以我可以通过这种方式声明一个实例并将数据添加到数组中。
@s = Something.new
@s.things << "one"
@s.things << "two"
我尝试创建一个名为things<<(inString)
的类方法来处理验证,但这不是有效的语法。那么我可以采取什么方法呢?
答案 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