use*_*087 4 ruby ruby-on-rails
Rails中不一致的命名约定使我感到困惑.似乎语法遍布整个地方.这里有些例子:
为什么下面的迁移中有逗号?而且,为什么关键字default在它之前没有冒号?这个default关键字,方法或变量,符号是什么?那是什么东西?:
add_column :zombies, :rotting, :boolean, default: false
Run Code Online (Sandbox Code Playgroud)
这是另一个例子:
为什么age不:age(带冒号)?为什么之前make_rotting用" :" 打电话?
class Zombie < ActiveRecord::Base
before_save :make_rotting
def make_rotting
if age > 20
self.rotting = true
end
end
end
Run Code Online (Sandbox Code Playgroud)
对于Java和PHP人来说,Ruby可能很难.:)
在Ruby中,并非所有内容都是它看起来的样子.以此为例,例如:
before_save :make_rotting
Run Code Online (Sandbox Code Playgroud)
这是一个方法调用,当然.但这不是make_rotting被称为的方法.这是before_save(:make_rotting是它的参数).这是ActiveRecord中的一个所谓的钩子.before_save将方法名称作为参数,并在时机到来时动态调用它.
if age > 20
Run Code Online (Sandbox Code Playgroud)
这age是方法调用,而不是符号.它可以写成:
if age() > 20
Run Code Online (Sandbox Code Playgroud)
但括号是可选的.最后:
add_column :zombies, :rotting, :boolean, default: false
Run Code Online (Sandbox Code Playgroud)
此方法有四个参数,最后一个是散列.哈希使用新的Ruby 1.9语法.以前它会像这样写(冒号在正确的地方,所有):
add_column :zombies, :rotting, :boolean, :default => false
Run Code Online (Sandbox Code Playgroud)
你应该阅读一本关于Ruby编程的好书,而不是从Stack Overflow帖子中汲取一些知识.:)
| 归档时间: |
|
| 查看次数: |
1290 次 |
| 最近记录: |