簡體   English   中英

如何在Ruby中編寫兩個帶有不同數量參數的方法

[英]How do write two methods with different number of arguments in Ruby

我正在嘗試在課堂上寫這個:

class << self
    def steps
      @steps.call
    end

    def transitions
      @transitions.call
    end

    def steps(&steps)
      @steps = steps
    end

    def transitions(&transitions)
      @transitions = transitions
    end
  end

因為在Ruby中,我無法執行這種方法重載,所以這是行不通的。 有沒有解決的辦法?

您可以使用方法別名和mixins來做到這一點,但是在Ruby中處理具有不同簽名的方法的方式是使用可選參數:

def steps(&block)
  block.present? ? @steps = block : @steps.call 
end

但是,這種委托是一種代碼味道。 這通常意味着您設計的界面有些尷尬。 在這種情況下,類似這樣的方法可能更好:

def steps
  @steps.call
end

def steps=(&block)
  @steps = block
end

由於遵循約定,因此這使系統中的其他對象清楚如何使用此接口。 它還允許其他情況,例如將塊傳遞到steps方法中以用於其他用途:

def steps(&block)
  @steps.call(&block)
end

Ruby不支持方法重載(原因請參見“ 為什么ruby不支持方法重載? ”)。 但是,您可以執行以下操作:

def run(args*)
  puts args
end

args將是傳入參數的數組。

您還可以傳遞選項的哈希值來處理參數,或者當您不想在方法主體中提供參數並處理nil時可以傳遞nil

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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