Ruby 板


LINE

edited: gem install ludy to see detail. 花了一点时间再测试了一下 curry 的实做, i am glad to announce that ludy 0.0.4 is released. 原本的 Proc#curry 被改名为 Proc#__curry__, 我很想把他 deprecate 掉,但是後来的 Kernel#curry 也有运用到该实做, 是有在考虑把他从 public 改到 private, 但考虑到也许还有用处, 还是暂时放在 public 下,以後如果发现真的没用了,会改到 private 下。 现在的用法是: multiply = lambda{|l,r| l*r} double = multiply.curry[2] assert_equal 8, double[4] assert_equal 6, double[3] xd = multiply['XD', 5] assert_equal 'XDXDXDXDXD', xd assert_equal 29, :+.to_proc.curry[18][11] assert_equal (0..4).to_a, lambda{|a,b,c,d,e|[a,b,c,d,e]}.curry[0][1][2][3][4] 只要呼叫到了 Kernel#curry, 且 caller 本身回应(respond_to?) :call 和 :[], 则回传一个 curry function, 这样就可以有更强的 consistency, 不需要注意什麽时候使用 () 而什麽时候使用 [], 请一律使用 function call/[], 不用担心参数是否足够,足够时就会 回传真正的答案,否则再度传回 curry function. 所以其实我是在想,以下两者是否相同? class Array; include Curry; end func1 = [].cfoldr func2 = [].method(:foldr).curry func1 == func2 # => true? or false? 我的希望是相同,当然。只是我直接换上这样的实做似乎有点问题, 这个状况可能在 0.0.5 中解决,使 curry module 和 kernel#curry 也能够拥有该有的一致性。 另一个棘手问题是 ruby 的 block, 乍看很好用,实际上也是,但是却 造成了很大的不一致。这一点也真的是很难搞定,之前的 this 就有碰上 这样的大问题,使用 yield 似乎无法产生正确的 call stack. * 最後则是 0.0.4 上的实做问题,由於 :*.to_proc 的这个 proc 无法 预测其正确的 arity, 就像 :message_that_you_never_know.to_proc 也不可能能知道他的 arity 是多少一样,这造成了难以判断何时该回传 正确的值而非另一个 curry function. 我是想要从 Symbol#to_proc 去 窜改,不过这会碰上另外两个问题: 1. 会跟其他人的实做冲突 2. caller 和 arity 是合并在一起的,意味还没 call 之前都不会知道 arity, 这样我就没办法强迫 Symbol#to_proc 能产生正确的 arity. 所以我只好用另外一个很愚蠢的方式:trial & error. begin # let's try if arguments are ready self.__send__ :orig_call, *args, &block rescue ArgumentError # oops, let's curry it method(:call).to_proc.__send__ :__curry__, *args end 效率问题就别提了,我真的觉得这样很蠢,可是好像也想不到更好的方式。 所以 0.0.4 就只暂时强化了 curry 的实做,离完善还有很大的一段距离。 虽然心血来潮度极高,但好像还算有进展? -- By Gamers, For Gamers - from the past Interplay --



※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 220.135.28.18 ※ 编辑: godfat 来自: 220.135.28.18 (08/13 01:04)







like.gif 您可能会有兴趣的文章
icon.png[问题/行为] 猫晚上进房间会不会有憋尿问题
icon.pngRe: [闲聊] 选了错误的女孩成为魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一张
icon.png[心得] EMS高领长版毛衣.墨小楼MC1002
icon.png[分享] 丹龙隔热纸GE55+33+22
icon.png[问题] 清洗洗衣机
icon.png[寻物] 窗台下的空间
icon.png[闲聊] 双极の女神1 木魔爵
icon.png[售车] 新竹 1997 march 1297cc 白色 四门
icon.png[讨论] 能从照片感受到摄影者心情吗
icon.png[狂贺] 贺贺贺贺 贺!岛村卯月!总选举NO.1
icon.png[难过] 羡慕白皮肤的女生
icon.png阅读文章
icon.png[黑特]
icon.png[问题] SBK S1安装於安全帽位置
icon.png[分享] 旧woo100绝版开箱!!
icon.pngRe: [无言] 关於小包卫生纸
icon.png[开箱] E5-2683V3 RX480Strix 快睿C1 简单测试
icon.png[心得] 苍の海贼龙 地狱 执行者16PT
icon.png[售车] 1999年Virage iO 1.8EXi
icon.png[心得] 挑战33 LV10 狮子座pt solo
icon.png[闲聊] 手把手教你不被桶之新手主购教学
icon.png[分享] Civic Type R 量产版官方照无预警流出
icon.png[售车] Golf 4 2.0 银色 自排
icon.png[出售] Graco提篮汽座(有底座)2000元诚可议
icon.png[问题] 请问补牙材质掉了还能再补吗?(台中半年内
icon.png[问题] 44th 单曲 生写竟然都给重复的啊啊!
icon.png[心得] 华南红卡/icash 核卡
icon.png[问题] 拔牙矫正这样正常吗
icon.png[赠送] 老莫高业 初业 102年版
icon.png[情报] 三大行动支付 本季掀战火
icon.png[宝宝] 博客来Amos水蜡笔5/1特价五折
icon.pngRe: [心得] 新鲜人一些面试分享
icon.png[心得] 苍の海贼龙 地狱 麒麟25PT
icon.pngRe: [闲聊] (君の名は。雷慎入) 君名二创漫画翻译
icon.pngRe: [闲聊] OGN中场影片:失踪人口局 (英文字幕)
icon.png[问题] 台湾大哥大4G讯号差
icon.png[出售] [全国]全新千寻侘草LED灯, 水草

请输入看板名称,例如:Gossiping站内搜寻

TOP