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
> -------------------------------------------------------------------------- <
作者: WanCW (旺小王) 看板: Ruby
標題: Re: [Ruby] overload?!
時間: Thu Sep 28 07:48:31 2006
※ 引述《WanCW (旺小王)》之銘言:
: 我在想,把 wiki 上的 OverLoad module 改成這樣的用法:
: overload :foo, :foo_a_b do |a, b| ... end # 自動定義一個 method 'foo_a_b'
: overload :foo, :foo_strings, String, String # 呼叫定義好的 method 'foo_str'
: 可以自由選擇 "直接呼叫特定 method" 或是 "使用 overloaded methods"
: 或許是可以接受的折衷方案吧 XD
我改寫了一個新的 Overload module:
http://rafb.net/paste/results/TXUxHU98.html
# 使用現成的 method
overload :foo, :foo_exists
# 定義一個新的 method 並 overload
overload :foo, :foo_strings, String, String do |str, str| ; end
# 以 block (匿名 method) 進行 overload
overload :foo, Integer do |i| ; end
還有不少要改進的地方: 定義 exception class, 更好的比對規則, ....
希望大家多多指教。 :)
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 218.166.100.252
> -------------------------------------------------------------------------- <
作者: WanCW (旺小王) 看板: Ruby
標題: Re: [Ruby] overload?!
時間: Sat Sep 30 21:40:04 2006
※ 引述《WanCW (旺小王)》之銘言:
: 我改寫了一個新的 Overload module:
: http://rafb.net/paste/results/TXUxHU98.html
Nopaste 的東西不會放太久,所以我改放這:
http://bigbold.com/snippets/posts/show/2642
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 218.166.112.76
因為 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