gpt4 book ai didi

ruby - 跳过条件回调 block 中的实例(lambda 或 Proc)

转载 作者:数据小太阳 更新时间:2023-10-29 07:52:29 24 4
gpt4 key购买 nike

我注意到几乎所有人都使用 Proc.new 而不是 lambda(我猜是因为它关心/或不关心元数)而且将当前实例作为参数传递也很常见。但是我检查了一下,它也可以在没有 |instance| 的情况下工作作为参数传递。看下面的例子

class SomeModel < ActiveRecord::Base
has_many :associated_objects

before_save :do_something, if: -> { associated_objects.empty? }
end

根据官方指南和网上的大部分帖子看来我应该这样写

before_save :do_something, if: Proc.new { |instance| instance.associated_objects.empty? }

我的示例使用 -> 并且没有参数有什么问题吗?这类似于在模型代码中的 self.some_method 中跳过作为接收者的自身并使用隐式接收者。

最佳答案

您没看错,在 Proc 或 lambda 中求值的范围会自动设置为您要保存的对象的当前实例。

来自rails docs您可以查看是否要定义自己的回调,您可以选择对范围内的对象使用 Proc 或 lambda。

If a proc, lambda, or block is given, its body is evaluated in the context of the current object. It can also optionally accept the current object as an argument.

我觉得有趣的是 Rails Guides建议将当前实例传递到 Proc 中(正如您所概述的那样)当隐含 self 时,很常见的地方是将该信息留在其他地方。

关于ruby - 跳过条件回调 block 中的实例(lambda 或 Proc),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28829717/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com