23

:symbolsRails が初めてで、フレームワーク内で, @ivars,をいつ/なぜ使用するかについて頭を悩ませようとしています"strings"

それらの違いを概念的に理解していると思います

  • :symbolプロジェクトごとに 1 つのインスタンスのみ
  • @ivarインスタンスごとに 1つ
  • 複数"strings"- 参照されるたびに作成されるため(?)

お気軽に訂正してください!

主な混乱は、Rails が何を期待しているかについての規則慣習を理解することから生じます - どこで、なぜ?

きっと「あはは!」があると思います。その瞬間が来ますが、私はまだそれを持っていません...私にはかなり恣意的であるように思えます(C/Obj-Cから来ています)。

-どうも

4

5 に答える 5

19

@instance_variableインスタンス変数です。通常、コントローラーで定義され、ビューでアクセスできます。

"string"、他の言語と同様に文字列です。

:symbolあなたが言及したように、名前と文字列を表す効率的な方法です。それらはリテラル値です。初期化され、Ruby セッション中に一度だけ存在します。String メソッドにアクセスできないため、これは文字列ではありません。それはシンボルです。その上、それは不変です。これらの理由から、ハッシュでキーを表すのに非常に便利です。Rails のメソッドはハッシュを使用するため、Rails のいたるところにシンボルが見られます。

于 2010-06-08T18:03:35.083 に答える
4

インスタンス変数は非常に単純です。特定のインスタンスのプロパティ/値を追跡するため、値がインスタンス間で異なる場合に使用します。

シンボルと文字列は、もう少し恣意的です。シンボルは通常、C などの言語が列挙型を使用するのとほぼ同じ方法で、定数値に使用されます。Ruby には列挙型がないため、そのギャップを埋めるためにシンボルがよく使用されます。文字列は、フラグや同様の定数として使用されない、より多様なテキストに使用されます。

于 2010-06-08T18:03:24.340 に答える
4

シンボルはポインターのようなものです (C っぽい方法ではありませんが、C っぽい考え方では、それらはポイントします)。プロパティを操作するときは、シンボルを使用します。私に言わせれば、これらは動的型付けの大きな利点の 1 つです。(潜在的な有権者にとって、私は害を及ぼすつもりはありません。彼らがポインターではないことは知っていますが、私にとっては「ああ!」と感じました)。

:action => "index"

インスタンス変数は、モデルからデータをフェッチし、それらをビュー全体 (コントローラー メソッド内) で使用する場合に必要です。

def my_controller_method
@myposts = Post.find(:all)
end

# inside view
<% for @myposts do |m| %>
<i><%= m.title %></i>
<% end %>

ルールと慣習は (Rails の旅で発見したように) バージョンごとにかなり急速に変化します。適切な Rails を備えた適切なガイドがあると役立ちます。コーディング頑張ってください!

于 2010-06-08T20:01:47.433 に答える
1

インスタンス変数は、実際には文字列やシンボルと同じリストに属していません。文字列とシンボルはクラスの型ですが、インスタンス変数は変数の型です。したがって、インスタンス変数 ( @var) は、1 つのクラスの 1 つのインスタンスのメソッド間で値を格納する方法にすぎません。

class Calculator
  @counter = 0

  def inc
    @counter += 1
  end

  def dec
    @counter -= 1
  end
end

これは、シンボルと文字列の違いに関する良い記事です。

于 2010-06-08T18:06:05.003 に答える
-1

Rails コントローラーは、ORM (オブジェクト リレーション マッピング) によってモデルを介して Rails データベースにアクセスします。つまり、モデル クラスは対応するテーブルにマップされ、オブジェクトはテーブル内の行に直接マップされます。特定のユーザー クエリの結果を取得するために、インスタンス変数 (@instance_variable) は、それに対処するのに最適です。

于 2014-10-07T14:06:47.783 に答える