Ruby——理解符号



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

例如,在下面的程序中,我将两个方法对象传递给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中符号的神秘本质(幕后发生的事情),那就太棒了!

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

这与符号无关。您甚至可以执行method('plus'),您将获得与方法(: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

符号的另一个例子我没有理解是关于封装--attrreader、attrwriter和attraccessor如何知道符号下面的引用了一个实例程序中的变量?

这些方法旨在为实例方法提供读取器、写入器和访问器(r+w)。他们只是获取传递的符号的值,并创建相关的方法。

相关内容

  • 没有找到相关文章