[英]Ruby Methods: how to return an usage string when insufficient arguments are given
在我創建了一大堆類(使用初始化方法)之后,我將這些類加載到IRb中以測試它們中的每一個。 我這樣做是通過創建簡單的實例並調用他們的方法來學習他們的行為。 但是有時我不記得在我在類上調用.new方法時我應該給出參數的確切順序。 它需要我回顧一下代碼。 但是,我認為返回使用消息應該很容易,而不是看到:
ArgumentError: wrong number of arguments (0 for 9)
所以我更喜歡返回一個帶有人類可讀參數的字符串,例如使用“puts”或只返回一個字符串。 現在我在開始結束代碼中看到了rescue關鍵字,但我想知道在調用initialize方法時如何捕獲ArgumentError。
感謝您的回答,反饋和意見!
可以通過重寫Class#new
方法來掛鈎對象創建,例如
class Class
# alias the original 'new' method before overriding it
alias_method :old_new, :new
def new(*args)
return old_new(*args)
rescue ArgumentError => ae
if respond_to?(:usage)
raise ArgumentError.new(usage)
else
raise ae
end
end
end
這個overriden方法調用普通的new
方法,但是捕獲ArgumentError
,如果正在創建的對象的類提供了一個usage
方法,那么它將引發帶有用法消息的ArgumentError
,否則它將重新加入原始的ArgumentError
。
以下是它的實例。 定義Person
類:
class Person
def initialize(name, age)
end
def self.usage
"Person.new should be called with 2 arguments: name and age"
end
end
然后嘗試在沒有必需參數的情況下實例化它:
irb(main):019:0> p = Person.new
ArgumentError: Person.new should be called with 2 arguments: name and age
from (irb):8:in `new'
from (irb):22
注意 :這並不完美。 主要的問題是我們捕獲的ArgumentError
可能是由於傳遞給initialize
的參數數量不正確而導致誤導性消息引起的。 但是在大多數情況下它應該做你想要的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.