4

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
4

2 に答える 2

8

Ruby は、Java や PHP の人にとっては難しいものです。:)

Ruby では、すべてが見た目どおりというわけではありません。たとえば、次のようにします。

before_save :make_rotting

これは確かにメソッド呼び出しです。しかし、make_rotting呼び出されるのはメソッドではありません。before_save(はその:make_rottingパラメーター) です。これは ActiveRecord のいわゆるフックです。before_saveメソッド名をパラメーターとして取り、その瞬間が来ると動的に呼び出します。

if age > 20

これageはシンボルではなくメソッド呼び出しです。次のように記述できます。

if age() > 20

ただし、括弧はオプションです。そして最後に:

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

このメソッドは 4 つのパラメーターを取り、最後のパラメーターはハッシュです。ハッシュは新しい Ruby 1.9 構文を使用します。以前は、次のように記述されていました (適切な場所にコロンを付けて、すべて):

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

スタック オーバーフローの投稿から知識をかき集めるのではなく、Ruby プログラミングに関する優れた本を読む必要があります。:)

于 2012-10-24T15:50:08.953 に答える
3

3つの主なもの:

  1. Ruby のメソッドでは、引数を括弧で囲む必要はありません。before_saveadd_columnはメソッドで:make_rottingあり、 への引数も同様before_saveです。
  2. a で始まるもの:はすべて記号です。シンボルは文字列に似ていますが、コード内で同じシンボルを何度使用しても、メモリに割り当てられるのは 1 回だけです。多くの場合、ハッシュキーとして使用されます。
  3. {}最後の引数としてハッシュを受け取る Ruby メソッドは、ハッシュの周りに 's を必要としません。

したがって、この:

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

次のように書き換えることができます。

add_column(:zombies, :rotting, :boolean, {default: false})
于 2012-10-24T15:46:27.613 に答える