簡體   English   中英

Ruby方法:如果給出的參數不足,如何返回用法字符串

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM