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

时间:2017-08-23 18:33:47

标签: ruby dynamic-dispatch

  1. 发送字符串和发送符号以动态调用方法之间的区别是什么,例如foo.public_send(:bar) vs foo.public_send('bar')?这些处理方式是否存在具体差异?

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

1 个答案:

答案 0 :(得分:3)

  1. 它们之间没有区别,事实上,当传递字符串时,它会转换为符号

  2. 无需转换,因为如果提供了字符串,则会进行相同的转化(例如'bar'.to_sym)。

  3. 来自docs

      

    调用 symbol 标识的方法,并传递任何参数   指定。与发送不同,#public_send仅调用公共方法。什么时候   该方法由字符串标识,该字符串转换为a   符号