Ruby ArgumentError陷阱

时间:2017-02-24 03:06:03

标签: ruby

给出一个课程:

class Foo 
  def initialize(input1) 
    @input1 = input1 
  end 
end 

是否有某种方式可以针对a = Foo.new()提出更有帮助的错误?如何构建一种以更有用的方式抛出ArgumentError的方法?

我想在课堂上建立这个。 Programming Ruby site列出了几种错误捕获机制,但所有这些似乎都依赖于在a = Foo.new()块中包装catch等。我想在类本身中捕获错误。

3 个答案:

答案 0 :(得分:1)

您可以使用默认值并在initialize方法中引发您需要的任何错误,例如

Class A
  def initialize(a = nil) 
    raise("give me an A") if a.nil? 
    @a = a
  end
end

答案 1 :(得分:0)

您可以通过在未定义参数时引发错误来完成此操作。您可以通过将该消息指定为异常的参数来向ArgumentError异常添加消息:

class Foo 
  def initialize(input1=nil)
    raise ArgumentError, "expected a value for Foo.new('value')" unless input1
    @input1 = input1 
  end 
end 

答案 2 :(得分:0)

稍微阅读Programming Ruby后,我认为使用alias_method作为挂钩可能会起作用:

alias_method :initialize_orig, :initialize
def initialize(*args)
  begin
    result = initialize_orig(*args)
    return result
  rescue Exception
    $stderr.print "Need to use argument 'input1'\n"
    raise
  end
end