Ruby——理解符号

发布于 2024-11-14 17:02:35 字数 561 浏览 1 评论 0原文

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

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

I'm having a little trouble understanding how symbols work in my code. I understand that they are essentially immutable strings, but I don't fully understand how symbols automatically "recognize" other parts of my code.

For example, in the program below, I pass two method objects to my math_machine methods, but to do so I use a symbol representing their name. How does Ruby know that I am referring to those methods?

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)

Another example of symbols I don't understand is regarding encapsulation -- how do attr_reader, attr_writer, and attr_accessor know that the symbol that follows refers to an instance variable in my program?

If someone could explain to me the mysterious nature of symbols in Ruby (what is going on behind the scenes) that would be awesome!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

漫雪独思 2024-11-21 17:02:35

例如,在下面的程序中,我
将两个方法对象传递给我的
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)。他们只是获取传递的符号的值,并创建相关的方法。

For example, in the program below, I
pass two method objects to my
math_machine methods, but to do so I
use a symbol representing their name.
How does Ruby know that I am referring
to those methods?

This has nothing to do with symbols. You can even do method('plus') and you'll get the same result as 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

Another example of symbols I don't
understand is regarding encapsulation
-- how do attr_reader, attr_writer, and attr_accessor know that the symbol
that follows refers to an instance
variable in my program?

These methods are meant to provide readers, writers, and accessors (r+w) to instance method. They just take the value of the symbol passed, and create the relevant methods.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文