#2 楼 @tablecell 就是换了个写法的链式调用
再来一个
class DelayedMethod
attr_reader :proc_chain
def initialize proc
@proc_chain = [proc]
end
def >> another
@proc_chain.concat another.proc_chain
self
end
end
_ = Object.new
class << _
def method_missing name, *args, &block
DelayedMethod.new(->(x){ x.send(name, *args, &block ) })
end
def log
DelayedMethod.new(->(x){ p x })
end
end
class Object
def >> delayed_method
delayed_method.proc_chain.reduce(self){|acc, x| x.(acc)}
end
end
[1,2,3] >> _.map{|x| %w{a b c d}[x] } >> _.join >> _.capitalize >> _.log # => "Bcd"
#9 楼 @jackalcooper 我讲模式匹配你又跟我讲 actor。。erlang 那点东西我又不是不知道,ruby 的对象和 actor 本来就是等同的抽象,ruby 的send
就是 erl 的!
,ruby 有私有状态,actor 的尾递归就不是私有状态了?你要不要记 pid?还有不知道你说的类变量是什么,我写 ruby 没用过类变量。
#3 楼 @chenge 模式匹配是不符合 ruby 哲学的,模式匹配相当于把对象剖开,但是 OO 哲学里对象内部对于外界都是不可见的,一切操作要以消息传递实现,就像现实中你不能随便拆开一个人的大脑查看。
[a,b] = [1,2]
这种语法糖,你已经钦定了一种数组实现,但是 OO 中数组只是一种能反应:[]
消息的对象。
类似地,你要如何实现 ActiveRecord::Relation 的模式匹配呢?
当你{total_count, records} = relation
,你已经在relation.instance_eval{|x| @total_count}
了,问题是,你怎么知道 relation 里有@records
和@total_count
?
当然,ruby 里也不是没有模式匹配,线性表的(a, (b, c)) = [1,[2,3]]
是没问题的。
还有 @Artoria 的面对接口的模式匹配:
OO 的哲学是模拟,FP 的哲学是推导。FP 喜欢赤裸着的纯数据,而 OO 则把每个对象看成“有自己主见的人”。二者的比较其实没有什么意义,完全在于你怎么看世界。纯数据操作当然是 FP 更方便,但是类似游戏这种模拟领域,OO 的好处就非常明显了。
要了解单件,建议先学 javascript
presenter 那样做很蠢。。decorator 则会让命名空间更乱
article.present.meta_title
这样是比较好的
类似的还有
product.update.available_stock
product.calc.profit
把操作分发到 Updater 和 Calculator 里做
图里的代码还有&&,还有 caseInsensitiveEqual,还有 contains 啊....
gravatar 好是好,可是被墙了
其实是 clang 比 gcc 快,之前 ruby weekly 好像发过
有种情况你不得不用 eval,就是你要 binding.eval 的时候
补充一点:如果用了 memcached,那么恰恰相反,是不会缓存 nil 的,要自己转换一下 nil
#10 楼 @Rei 有 controller 这个 option 吗,我在http://edgeapi.rubyonrails.org/classes/ActionDispatch/Routing/Mapper/Resources.html#method-i-resources没看到
我回去试试吧
找到了,是 match 的 option,那就没问题了
#1 楼 @lixu19941116 这个是错误的,正确的具名路由是 new_order_review_path,我也不是很想打破 rails 的规则,不行的话我还是在 reviews 控制器按参数处理算了
迁移有歧义啊,另外要 jq 的话可以试试 bacon.js,部分场景有奇效
#9 楼 @lilijreey Actor 的信箱本来就是锁
#3 楼 @lilijreey 前言不搭后语,nodejs 还要学?现在用 em 就能实现一模一样的东西。immutable 的值为什么不能共享?
泡沫要破了
这种重要数据没有 schema 检查很容易烂掉的,逻辑上也会有脱离 Order 查 Item 的情况,例如统计各商品售出等,另外这个 Item 只是存个名字是不是太简陋了点...
《Ruby 编程语言》
end_time >= end_at and end_time <= end_at 不就是 end_time = end_at 么。。
另外应该有 where.or 这种东西的(不确定)
不常用
#16 楼 @darkbaby123 233 我早就说过了,我是被 Radium 坑得惨,后来在没法构建的情况下把这个依赖整个去掉了
因为你在打印对象的时候调用了对象的 inspect 方法,但是 inspect 对于 BasicObject 不存在,所以调用了 method_missing,然后 inspect 被 send 回 target,结果存入 result,返回 result