[ruby-list:50113] [ANN] Ruby + type = Rubype
From:
Tanaka Kazuki <mail@...>
Date:
2015-04-13 08:45:12 UTC
List:
ruby-list #50113
こんにちは.
Rubype というオモチャGemを作りましたので、宜しければ遊んで見て下さい.
https://github.com/gogotanaka/Rubype
実行時レベルでメソッドに型拘束 をお手軽につける、という事になっています.
ここでいう型拘束とは、引数or返値が反応すべきメソッドや#is_a? が真を返すべきモジュールやクラスを指定し
条件に漏れればいい感じのエラーを吐き捨てるという事を指します.
何かひらめきのお手伝いになれれば幸いです.
require 'rubype'
class MyClass
# Assert first arg has method #to_i, second arg and return value are instance of Numeric.
def sum(x, y)
x.to_i + y
end
typesig :sum, [:to_i, Numeric] => Numeric
end
MyClass.new.sum(:has_no_to_i, 2)
#=> Rubype::ArgumentTypeError: for MyClass#sum's 1st argument
# Expected: respond to :to_i,
# Actual: :has_no_to_i
# ...(stack trace)
実装はprependされた無名モジュール(プロキシの様なイメージ)が引数返値を逐一確認するという80行ほどの素朴なものとなっています.
田中--===============================Keio university mathematical sciences 田中 和希 Kazuki Tanaka
mail: mail@tanakakazuki.comHP: http://gogotanaka.me/Blog: http://blog.gogotanaka.me/Twitter: @gogo_tanakaFacebook: https://www.facebook.com/gogogogotanaka===============================