gpt4 book ai didi

ruby-on-rails - 那是一个变量,一个符号,一个方法,为什么这个有冒号而那个没有?

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

Rails 中不一致的命名约定让我感到困惑。似乎语法无处不在。以下是一些示例:

下面的迁移为什么有逗号?而且,为什么关键字 default 前面没有冒号?这个default关键字是什么,一个方法,还是一个变量,一个符号?那是什么东西?:

add_column :zombies, :rotting, :boolean, default: false

这是另一个例子:

为什么 age 不是 :age(带冒号)?为什么 make_rotting 在调用之前带有“:”?

 class Zombie < ActiveRecord::Base
before_save :make_rotting

def make_rotting
if age > 20
self.rotting = true
end
end
end

最佳答案

对于 Java 和 PHP 用户来说,Ruby 可能很难。 :)

在 Ruby 中,并不是所有的事情都是它看起来的样子。以此为例:

before_save :make_rotting

当然,这是一个方法调用。但调用的不是 make_rotting 方法。它是 before_save(:make_rotting 是它的参数)。这就是 ActiveRecord 中所谓的钩子(Hook)。 before_save 将一个方法名作为参数,并在时机成熟时动态调用它。

if age > 20

这里的age是方法调用,不是符号。可以写成:

if age() > 20

但是括号是可选的。最后:

add_column :zombies, :rotting, :boolean, default: false

此方法有四个参数,最后一个是哈希值。哈希使用新的 Ruby 1.9 语法。以前它会这样写(冒号在正确的位置,所有):

add_column :zombies, :rotting, :boolean, :default => false

您应该阅读一本关于 Ruby 编程的好书,而不是从 Stack Overflow 帖子中抄袭一些知识。 :)

关于ruby-on-rails - 那是一个变量,一个符号,一个方法,为什么这个有冒号而那个没有?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13052646/

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