我想做的是确保参数满足某些条件,否则会引发错误。
像这样(假设我想确保 n> 0):
def some_method(n)
raise "some error" unless n > 0
... # other stuffs
end
Scala 中有require
一种方法可以测试表达式,如果为 false,则抛出 IllegalArgumentException。
如果露比有这样的事情?
我知道 ruby 在单元测试中有assert
系列方法。但我不认为这是我想要的。
编辑
我只想知道是否有其他方法可以确保参数满足某些条件,而不是raise
.(scala中的require
非常适合这一点。
你最初的尝试有什么问题?如果您确实想抛出异常,它可以正常工作。如果需要,您可以创建一个方法来测试需求,但它并没有真正做太多事情:
def req(cond, error)
raise error if cond
end
def method(n)
req(n < 0, ArgumentError.new('YOU BROKE IT'))
# Method body
end
method(-1) # => method.rb:2:in 'req': YOU BROKE IT (ArgumentError)
问题是你想指定错误类,并且想写出要满足的条件而不是不发生的条件,那么你不需要什么特殊的东西。
def some_method(n)
raise ArgumentError.new("some error") unless some_condition
raise ArgumentError.new("another error") unless another_condition
raise ArgumentError.new("yet another error") unless yet_another_condition
...
end