IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    Ruby vs C++ for delegation

    Yukang (moorekang@gmail.com)发表于 2012-10-16 00:00:00
    love 0

    下班之前同事BigBird给我show他的一段C++代码,对于我等拿C++当作C来用的未入门者实看起来实在是炫丽。虽然比较冗长晦涩,不过还是能看懂个大概,然后觉得这对于动态语言是非常容易实现的。 于是晚上回来用Ruby来搞搞,弄出下面这么段代码。

    C++版本在这里https://gist.github.com/3900077。 可见动态语言和编译型语言实现起来效率还是好太多了,同时代码也好理解。 再次我讨厌C++类型推导,^_^。

    Ruby实现这个方式很多,另外Ruby的库包含SimpleDelegator的,将调用的方法直接传递到其他对象。

    #!/usr/bin/ruby
    
    class Delegate
      attr_reader :proc_list
    
      def initialize()
        @proc_list = []
      end
    
      def add(*proc)
        proc_list.push(proc)
      end
    
      def eval(obj)
        for e in proc_list:
            if obj.respond_to?(e[0])
              if e.size == 1
                obj.__send__(e[0])
              else
                obj.__send__(e[0], e[1])
              end
            else
              printf "ERROR:%s is not defined\n", e[0]
            end
        end
      end
    
    end
    
    class Demo
      attr_writer :value
    
    public
      def print()
        printf "value:%d\n", @value
      end
    
      def hello()
        printf "Hello world!\n"
      end
    
      def set(val)
        @value = val
      end
    end
    
    delegate = Delegate.new()
    delegate.add("print")
    delegate.add("set", 1)
    delegate.add("print")
    delegate.add("hello")
    delegate.add("nodefine")
    
    d = Demo.new()
    delegate.eval(d)
    


沪ICP备19023445号-2号
友情链接