在 Ruby 的 C 源代码中,Ruby 运算符 `=` 是在哪里定义的?

4

我想查看=的逻辑代码,但找不到它。

更新:

我在text/ruby/test_assignment.rb中找到了test_multi方法的Ruby代码,但似乎能让我到达目的地。

我想检查代码的原因是查找它如何处理多重赋值。例如:a,b,c = [1,2,3]

更新:

我找到了关键字“MASGN”,并引导我到

compile_massign(rb_iseq_t *iseq, LINK_ANCHOR *ret, NODE *node, int poped)在compile.c中

http://github.com/ruby/ruby/commit/e39eb9dab50eaa681467e51145b37cdc11667830#diff-2

3个回答

2

我认为你不会找到任何关于=的代码。

=是定义Ruby语言的语法规则的一部分,解析器(用C编写)将使用该语法规则。


1

http://svn.ruby-lang.org/repos/ruby/branches/ruby_1_9_2/parse.y第1088-1116行

| var_lhs tOP_ASGN command_call
        {
        /*%%%*/
        value_expr($3);
        if ($1) {
            ID vid = $1->nd_vid;
            if ($2 == tOROP) {
            $1->nd_value = $3;
            $$ = NEW_OP_ASGN_OR(gettable(vid), $1);
            if (is_asgn_or_id(vid)) {
                $$->nd_aid = vid;
            }
            }
            else if ($2 == tANDOP) {
            $1->nd_value = $3;
            $$ = NEW_OP_ASGN_AND(gettable(vid), $1);
            }
            else {
            $$ = $1;
            $$->nd_value = NEW_CALL(gettable(vid), $2, NEW_LIST($3));
            }
        }
        else {
            $$ = NEW_BEGIN(0);
        }
        /*%
        $$ = dispatch3(opassign, $1, $2, $3);
        %*/
        }

0
我不知道你所说的“Ruby的C源代码”是什么意思。Ruby是一种编程语言。编程语言没有源代码(只有编译器和解释器有),它们有规范。
多重赋值的规范在当前(2009-12-01)ISO Ruby Draft Specification的第11.3.1.3节“Multiple Assignments”(第59-62页)和可执行的RubySpec中的language/variables_spec.rb(搜索“multiple”,不幸的是测试有点分散在文件中)中。
一个可能的实现的良好概述可以在Rubinius编译器中找到(抱歉,这里也没有C源代码),在lib/compiler/ast/variables.rb的482-607行中。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接