新手问题 模块中使用 class<<self 怎么理解

wuhlcom · 2016年06月12日 · 最后由 watraludru 回复于 2016年06月13日 · 1743 次阅读
module Test
        mc = (
        class << self;
                p self;
        end)
        p mc.class
        mc.send :attr_accessor, :parallel_executor

end
p Test.class
Test.parallel_executor="11"
p Test.parallel_executor

输出结果:

<Class:Test>
Class
Module
"11"

Test 模块中 parallel_executor 成了模块的属性方法,mc.send 可以添加很多与 parallel_executor 类似的模块属性方法,但我不是很能理解这种用法,哪位能指点一下?

module Test
  mc = (
    class << self;
      p self; # p 函数会返回 self 的引用,之后被绑定到 mc 变量 
    end
  )
  mc.send :attr_accessor, :parallel_executor
end

效果等同于下面的写法,,,

module Test
  class << self;                
    :attr_accessor, :parallel_executor
  end
end

#1 楼 @watraludru 你这个不对吧,我在 ruby 2.3.0 下,你这个都有语法错误

attr_accessor, :parallel_executor #这里语法错误


E:\autotest\experiment\winpcap>ruby test_winpcap.rb
test_winpcap.rb:18: syntax error, unexpected ',', expecting keyword_end
                                :attr_accessor, :parallel_executor
                                               ^

你是不是想说是这个

module Test
        class << self;
                attr_accessor :parallel_executor #
        end
end

#2 楼 @wuhlcom 对,就是你说的这个,从上面复制时没修改过来。。。

需要 登录 后方可回复, 如果你还没有账号请 注册新账号