Ruby 中的动态调度:字符串与符号

Dynamic dispatch in Ruby: strings vs symbols

  1. 发送字符串和发送符号动态调用方法有什么区别,例如foo.public_send(:bar) vs foo.public_send('bar')?这些处理方式有具体区别吗?

  2. 如果符号更好,是否值得做 foo.public_send('bar'.to_sym) 如果出于某种原因您需要将方法名称构造为字符串?

  1. 它们之间没有区别,实际上,当传递一个string时,它被转换为一个symbol .

  2. 无需转换,因为如果提供 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.