新手问题 这些个回调都是什么意思?

xiaobai2 · 2016年09月06日 · 最后由 xiaobai2 回复于 2016年09月06日 · 2356 次阅读

刚进一家公司看到用了很多回调,但是看到这些用法感觉有点儿蒙!

after_create :set_name, if: Proc.new {|o| o.name.present?}
after_create :set_defult, if: :is_default

这什么意思?

假如我想在创建之后,根据 self 的某个列是否满足特定条件才去走 after_create 该怎么写?这样吗?

after_create :xxxx,  if: -> { self.changed? }

求解

下面这个用法

after_create :do_something,  if: Proc.new { |o| o.changed? }

转变成 Ruby 的 new lambda literal syntax 的写法得写成下面这样,只是语法上的优化,本质一样

after_create :do_something,  if: -> (o) { o.changed? }

你的写法更像 JavaScript,Ruby 的 lambda 语法跟 JavaScript 略有区别,不过倒是可以把 lambda 当做 JavaScript 中的匿名函数来理解,会简单一点。

#2 楼 @lgn21st 我一直是吧 lambda 当做 JS 的匿名函数理解的,请问 lambda 和匿名函数其实有没有区别?

#3 楼 @FrankFang 一两句话解释不清楚,网上的介绍资料到处都是,给你贴一个吧 https://www.sitepoint.com/closures-ruby/

@lgn21st 其实我想问的是

after_create :set_defult, if: :is_default

这个 is_default 指的是列明还是实例方法?

#5 楼 @xiaobai2 方法名,获取字段值的方法也是方法

#5 楼 @xiaobai2 你这个问题在 #1 楼 就回答清楚了,我以为你在问语法问题。

#8 楼 @lgn21st 好的,不太清楚,所以确认一下

需要 登录 后方可回复, 如果你还没有账号请 注册新账号