Ruby 中是否有一种优雅的方式,它的作用类似于 Scala 中的“require”



我想做的是确保参数满足某些条件,否则会引发错误。

像这样(假设我想确保 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

相关内容

最新更新