Yukang's Page

Ruby vs C++ for delegation

2012-10-16

下班之前同事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)
使用微信打赏

若你觉得我的文章对你有帮助,欢迎点击上方按钮对我打赏

扫描二维码,分享此文章