[英]How to convert method to proc for &method usage in Ruby
為了便於學習,我探索,如果我可以轉換這三個方法調用:
Foo::Bar.logger.debug(a)
Foo::Bar.logger.debug(b)
Foo::Bar.logger.debug(c)
使用簡寫的proc &method
方法轉換為單行語句:
[a, b, c].each(&method(:'Foo::Bar.logger.debug'))
.debug
不會自然地響應.to_proc
:
NameError: undefined method `Foo::Bar.logger.debug' for class `#<Class:Foo>'
這確實有效; 但是,它不像前者那么簡潔:
logger = Proc.new { |x| Foo::Bar.logger.debug(x) }
[a, b, c].each(&logger)
是否有可能為前者的工作方式?
您使用的method
方法不正確。 從精美的手冊中 :
方法(符號)→方法
在obj中查找命名方法作為接收器,返回一個Method
對象(或引發NameError
)。
你通常會說
m = some_obj.method(:some_method_name)
然后與m
。 說:
method(:Foo::Bar.logger.debug)
應該給你一個TypeError
因為因為:Foo
是一個符號,而不是一個類或模塊,並且試圖將::
應用於符號沒有意義。 我懷疑您實際上是在說:
method(':Foo::Bar.logger.debug')
因為那樣會產生您所看到的錯誤。 假設是這種情況,那么您實際上是在嘗試獲取對象self
名為':Foo::Bar.logger.debug'
的方法的引用。
如果要在Foo::Bar.logger
引用debug
方法,則可以說:
Foo::Bar.logger.method(:debug)
結合您的to_proc
調用(通過&
):
[a, b, c].each(&Foo::Bar.logger.method(:debug))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.