簡體   English   中英

如何在Ruby中將方法轉換為proc以用於&method

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

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