Ruby - 理解符号

时间:2011-06-08 21:31:24

标签: ruby ruby-on-rails-3 symbols

我在理解符号在代码中的工作方式时遇到了一些麻烦。我知道它们本质上是不可变的字符串,但我不完全理解符号如何自动“识别”我的代码的其他部分。

例如,在下面的程序中,我将两个方法对象传递给我的math_machine方法,但为此我使用了一个代表其名称的符号。 Ruby如何知道我指的是那些方法?

def plus x,y
    return x+y
end

def minus x,y
    return x-y
end

def math_machine(code,x,y)
    code.call(x,y)
end

puts math_machine(method(:plus),5,5)
puts math_machine(method(:minus),5,5)

我不理解的另一个符号示例是关于封装 - attr_readerattr_writerattr_accessor如何知道后面的符号是指我的实例变量程序

如果有人能向我解释Ruby中符号的神秘本质(幕后发生的事情)会很棒!

1 个答案:

答案 0 :(得分:1)

  

例如,在下面的程序中,我   将两个方法对象传递给我   math_machine方法,但这样做我   使用代表其姓名的符号。   Ruby如何知道我指的是什么   那些方法?

这与符号无关。你甚至可以做method('plus'),你会得到与方法相同的结果(:加号)。

irb(main):001:0> def plus
irb(main):002:1> end
=> nil
irb(main):003:0> method(:plus)
=> #<Method: Object#plus>
irb(main):004:0> method('plus')
=> #<Method: Object#plus>
irb(main):005:0> method('plus') == method(:plus)
=> true
  

我没有的另一个符号示例   理解是关于封装    - attr_reader,attr_writer和attr_accessor如何知道符号   以下是指一个实例   在我的程序中变量?

这些方法旨在为实例方法提供读者,编写者和访问者(r + w)。他们只需要传递符号的值,并创建相关的方法。