符号和符号表的用法

wmo*_*ock 2 ruby symbols

  1. 在许多Rails方法中,符号作为参数传递.我不确定其中一些参数是如何引用其他方法的.换句话说,符号指向另一种方法.我理解符号如何:something总是指向相同的内存分配,这与多个实例不同,比如说"something".如果我有一个符号:x并且还定义了一个方法x(),这是否意味着这两个是以某种方式链接的?

  2. Ruby书籍描述了符号表的概念:

    符号是其值本身的标识符.从广义上讲,它描述了符号从Ruby程序员的角度出发的方式.但它并没有告诉你从Ruby解释器的角度来看,字面上是什么符号.实际上,符号是指向符号表的指针.符号表是Ruby的已知标识符的内部列表 - 例如变量和方法名称.

    我偶然发现它是如何引用不同的方法或字符串的.有人可以帮我理解这个符号表以及它与用作方法名称的符号有什么关系?

Ser*_*sev 7

符号本身不以任何方式与方法相关联.某些方法可以接受符号来动态调用其他方法,使用符号作为其名称.注意:

class Foo
  def bar
    "called bar"
  end

  def baz
    "called bazzz"
  end

  def invoke m
    send m
  end
end

f = Foo.new
f.invoke :bar # => "called bar"
f.invoke :baz # => "called bazzz"

# since `invoke` just delegates execution to `send`, and `send` can accept strings as well
#   we can pass a string here. 
f.invoke 'baz' # => "called bazzz"
Run Code Online (Sandbox Code Playgroud)

这与案例相同

before_filter :init_session
validates_presence_of :first_name
Run Code Online (Sandbox Code Playgroud)

还有很多其他人

编辑:

如果我有一个符号:x并且还定义了一个方法x(),它是否意味着这两个是以某种方式链接的?

,他们没有任何联系.您可以放心地忽略关于符号表的那段话.这是您目前不必要的实施细节.