[Ruby] overload?!
因為 Ruby 是 dynamic type + duck typing
所以語言本身並不支援 overload;
可是類似這樣的一段 code:
def url_for(options = {}, *parameters_for_method_reference) #:doc:
case options
when String then options
when Symbol then send(options, *parameters_for_method_reference)
when Hash then @url.rewrite(rewrite_options(options))
end
end
如果能有 overload 的機制還是比較方便。
本來想自己刻一個 overload module,
不過在 ruby.tw 的 wiki 找到了現成的 OverLoad module
http://willh.org/cfc/wiki/index.php?title=Meta_Programming
有了這個 module ,我們就可以這樣寫:
class Test
include OverLoad
def foo
puts 'original foo'
end
overload :foo do |a,b|
puts a+b
end
overload :foo, String, String do |a,b|
puts "the String is #{a} #{b}"
end
end
動態語言果然是好物! (Y)
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.124.182.108
討論串 (同標題文章)
Ruby 近期熱門文章
PTT數位生活區 即時熱門文章