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)
使用微信打赏

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

扫描二维码,分享此文章