Ruby 中的动态调度:字符串与符号
Dynamic dispatch in Ruby: strings vs symbols
发送字符串和发送符号动态调用方法有什么区别,例如foo.public_send(:bar)
vs foo.public_send('bar')
?这些处理方式有具体区别吗?
如果符号更好,是否值得做 foo.public_send('bar'.to_sym)
如果出于某种原因您需要将方法名称构造为字符串?
它们之间没有区别,实际上,当传递一个string时,它被转换为一个symbol .
无需转换,因为如果提供 string,将完成相同的转换(例如 'bar'.to_sym
)。
来自docs:
Invokes the method identified by symbol, passing it any arguments
specified. Unlike send, #public_send
calls public methods only. When
the method is identified by a string, the string is converted to a
symbol.
发送字符串和发送符号动态调用方法有什么区别,例如
foo.public_send(:bar)
vsfoo.public_send('bar')
?这些处理方式有具体区别吗?如果符号更好,是否值得做
foo.public_send('bar'.to_sym)
如果出于某种原因您需要将方法名称构造为字符串?
它们之间没有区别,实际上,当传递一个string时,它被转换为一个symbol .
无需转换,因为如果提供 string,将完成相同的转换(例如
'bar'.to_sym
)。
来自docs:
Invokes the method identified by symbol, passing it any arguments specified. Unlike send,
#public_send
calls public methods only. When the method is identified by a string, the string is converted to a symbol.