【发布时间】:2017-09-25 01:31:55
【问题描述】:
出于学习目的,我正在探索是否可以转换这三个方法调用:
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期望你提出的论点,这告诉了你什么?错误消息告诉您它试图找到该方法的哪里?这告诉您method的工作原理是什么?它在哪里说不回复to_proc?为什么你会得出问题出在to_proc的结论? -
我猜
[a, b, c].each { |x| Foo::Bar.logger.debug(x) }会不会太简单了? ;-) -
@JörgWMittag 我确实阅读了错误消息,但我不明白。我的想法是将
&method传递给一个函数,该函数接受一个块调用.to_proc来自StackOverflow 链接博客的方法:skorks.com/2013/04/ruby-ampersand-parameter-demystified(部分:Proc 技巧的符号)。我没有想到需要专门在方法的类上调用method方法。 -
@Stefan 绝对简单,但如上所述,这是一个学习更多关于 procs 和
&method方法的练习。