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