gpt4 book ai didi

ruby-on-rails - 定义? Ruby 和 Rails 中的方法

转载 作者:数据小太阳 更新时间:2023-10-29 06:27:02 25 4
gpt4 key购买 nike

我有一个基于 ERB 编写的相当古老的模板系统。它依赖于存储在数据库中的 ERB 模板。那些被阅读和呈现。当我想将数据从一个模板传递到另一个模板时,我使用 Rails render 方法的 :locals 参数。为了在某​​些模板中设置这些变量的默认变量,我使用 defined?方法简单地告诉我局部变量是否已经定义,如果没有,我用默认值初始化它,如下所示:

unless defined?(perex)
perex = true
end

我正在将应用程序升级到最新的 Rails,我看到了一些奇怪的行为。基本上这有时有效(有时 perex 未定义)有时无效(perex 已定义并设置为 nil)。这是在没有任何其他改变的情况下发生的。

我有两个问题:除了使用定义之外还有什么更好的方法吗?哪个被证明是不可靠的(在顶级 Rails 1.6 上可靠了好几年)?这样的方式不应该导致我重写所有的模板。我一直在浏览 Ruby 文档,但找不到任何关于 defined?方法。它是被弃用了还是我只是瞎了眼?

编辑: 实际问题似乎是由 Ruby/eRB 错误引起的。有时 unless 语句会起作用,但有时不会。奇怪的是,即使第二行被执行 perex stil 仍然对世界其他地方保持零。删除定义?解决了这个问题。

最佳答案

首先:实际上,defined? is an operator .

第二:如果我正确理解你的问题,那么使用这个 Ruby 习惯用法就是:

perex ||= true

如果 perex 未定义或 nil,它将赋值为 true。这不完全是您的示例所做的,因为您的示例在值为 nil 时不会评估分配,但如果您依赖它,那么在我看来,如果没有看到它,您就不会编写清晰的代码。

编辑:正如 Honza 指出的那样,当 perexfalse 时,上面的语句将替换它的值。然后我建议如下重写最小行数:

perex ||= perex.nil?  # Assign true only when perex is undefined or nil

关于ruby-on-rails - 定义? Ruby 和 Rails 中的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/238615/

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