给出一个课程:
class Foo
def initialize(input1)
@input1 = input1
end
end
是否有某种方式可以针对a = Foo.new()
提出更有帮助的错误?如何构建一种以更有用的方式抛出ArgumentError
的方法?
我想在课堂上建立这个。 Programming Ruby site列出了几种错误捕获机制,但所有这些似乎都依赖于在a = Foo.new()
块中包装catch
等。我想在类本身中捕获错误。
答案 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