gpt4 book ai didi

ruby - Ruby 的 AST 中的 'send' 关键字是什么意思?

转载 作者:数据小太阳 更新时间:2023-10-29 07:12:36 26 4
gpt4 key购买 nike

我正在尝试学习 Ruby 词法分析器和解析器 ( whitequark parser ) 以了解更多有关从 Ruby 脚本进一步生成机器代码的过程。

在解析以下 Ruby 代码字符串时。

def add(a, b)
return a + b
end

puts add 1, 2

它导致以下 S 表达式符号。

s(:begin,
s(:def, :add,
s(:args,
s(:arg, :a),
s(:arg, :b)),
s(:return,
s(:send,
s(:lvar, :a), :+,
s(:lvar, :b)))),
s(:send, nil, :puts,
s(:send, nil, :add,
s(:int, 1),
s(:int, 3))))

任何人都可以向我解释生成的 S 表达式符号中 :send 关键字的定义吗?

最佳答案

Ruby 建立在“一切皆对象”范式之上。也就是说,包括数字在内的一切都是对象。

操作符,正如我们在普通 ruby​​ 代码中看到的那样,只不过是一个语法糖,用于各个对象的方法调用:

3.14.+(42)
#⇒ 45.14

以上正是 Ruby 对待 3.14 + 42 简写法的方式。反过来,它可能使用通用 Object#send 编写:

3.14.send :+, 42
#⇒ 45.14

后者应理解为:“将消息 :+ 与参数 [s] (42) 发送到接收方 3.14。 ”

关于ruby - Ruby 的 AST 中的 'send' 关键字是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44299341/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com