和方法的使用对于学习的目的,我在探索,如果我可以转换这三个方法调用:如何转换方法,过程,在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)
以前的方法有可能工作吗?
你看了错误信息?错误消息告诉你它找不到的方法的名称是什么?这是什么告诉你有关'方法'期待你的论点?错误消息告诉你什么*它在哪里试图找到该方法?那告诉你“方法”是如何工作的?它在什么地方说了什么不回应'to_proc'?你为什么会用'to_proc'来得出问题的结论? –
我猜''a,b,c] .each {| x | Foo :: Bar.logger.debug(x)}'会过于简单吗? ;-) – Stefan
@JörgWMittag我没看过错误信息,但我不明白。我得到了将'&method'传递给接受块调用的func的想法。to_proc'方法从一个StackOverflow链接的博客:https://www.skorks.com/2013/04/ruby-ampersand-parameter-demystified/(section:The Symbol To Proc Trick)。我没有想到需要在方法的类上专门调用'method'方法。 – doremi