self #=> Global env. Object hoge = "hoge" self.hoge = "hoge" Global.hoge = "hoge" Global.Global #=> Global Global.proto #=> Object Global.fun #=> fun {|&block| [native] } Object.foo = fun { self #=> a env. object having receiver as proto } Array.map = fun {|&f| ret = [] self.each {|i| ret << f(i) } ret } String.each = fun {|&f| split("").each(&f) } String.map = Array.slot("map") String["map"] = Array.slot("map") String.set_slot("map", Array.slot("map")) String["[]="]("map", Array.slot("map")) Array.clone.set(1, 2, 3) == [1, 2, 3] == Array.with(1, 2, 3) o = Object.clone.do { self #=> just the `o` hoge = "hoge" self.foo = "foo" fuga = fun {|x| "fuga" } } o.hoge #=> "hoge" o.foo #=> "foo" o.fuga #=> "fuga" o.slot("fuga") #=> fun {|x| "fuga" } Array.sum = Array.slot("inject").partial(0) {|r,i| r + i} [1, 2, 3].sum #=> 6
括弧の省略をしても呼びだしされるあたりがなんかうまくいかなそう。文法の矛盾があったりして、寝ておきたら「だめじゃんw」と思うんだろうなぁ。
Ruby を書いててときどき、 JS みたいに関数を自由にあつかいたいと思う。Ruby はクラスベースで、メソッドはかならずどこかのクラスに属し、UnboundMethod は bind しないかぎりよべず、bind の対象ももとのクラスと関係がないといけない。だから……だからなんだろう……
うまくまとまらない。
したいこと