【问题标题】:Ruby -- understanding symbolsRuby——理解符号
【发布时间】:2011-09-11 05:57:16
【问题描述】:

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

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

【问题讨论】:

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


【解决方案1】:

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

这与符号无关。你甚至可以做method('plus'),你会得到和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)。他们只是获取传递的符号的值,并创建相关的方法。

【讨论】:

    猜你喜欢
    • 2011-01-21
    • 2013-01-22
    • 2013-11-15
    • 2016-02-24
    • 2010-10-05
    • 2020-09-06
    相关资源
    最近更新 更多