339

@titleとはどう違いtitleますか?どちらも変数名になる可能性があるためです。また、使用する変数の種類をどのように決定すればよいですか? あり@ますか?

4

7 に答える 7

501

titleローカル変数です。それらはそのスコープ内にのみ存在します(現在のブロック)

@titleはインスタンス変数であり、クラス内のすべてのメソッドで使用できます。

ここで詳細を読むことができます: http://strugglingwithruby.blogspot.dk/2010/03/variables.html

Ruby on Rails の場合 - コントローラーで変数をインスタンス変数 ( @title) として宣言すると、ビューで使用できるようになります。

于 2013-01-14T13:40:30.227 に答える
37

ビューで変数を使用できるようにする場合は、コントローラーで使用@titleします。

説明は、これ@titleはインスタンス変数でtitleあり、ローカル変数です。Rails は、テンプレート コード (erb、haml など) が現在のコントローラー インスタンスのスコープ内で実行されるため、コントローラーのインスタンス変数をビューで使用できるようにします。

于 2013-01-14T13:40:48.300 に答える
26

違いは、変数のスコープにあります。@version は、クラス インスタンスのすべてのメソッドで使用できます。

簡単な答えは、コントローラーを使用していて、ビューで変数を使用できるようにする必要がある場合は、@variable.

より長い答えについては、これを試してください:http://www.ruby-doc.org/docs/ProgrammingRuby/html/tut_classes.html

于 2013-01-14T13:33:59.730 に答える
15

@variables は ruby​​ ではインスタンス変数と呼ばれます。つまり、クラス内の任意の方法でこれらの変数にアクセスできます。[クラス内のすべてのメソッドにわたって]

記号のない@変数はローカル変数と呼ばれます。つまり、宣言されたメソッド内でのみこれらのローカル変数にアクセスできます。ローカル スコープに限定されます。

インスタンス変数の例:

class Customer
  def initialize(id, name, addr)
    @cust_id = id
    @cust_name = name
    @cust_addr = addr
  end

  def display_details
    puts "Customer id #{@cust_id}"
    puts "Customer name #{@cust_name}"
    puts "Customer address #{@cust_addr}"
  end
end

上記の例@cust_idでは@cust_name@cust_addrがクラス内の別のメソッドでアクセスされます。しかし、同じことはローカル変数ではアクセスできません。

于 2014-07-04T13:44:41.650 に答える
4

ローカル変数は、その初期化のブロック内からのみアクセスできます。また、ローカル変数は小文字 (az) またはアンダースコア (_) で始まります。

また、インスタンス変数はのインスタンスでselfあり、a で始まり@ます。また、インスタンス変数はオブジェクト自体に属します。.sendインスタンス変数は、ieなどでメソッドを実行するものです

例:

@user = User.all

@userインスタンス変数です

また、初期化されていないインスタンス変数の値はNil

于 2013-12-09T09:33:06.357 に答える
1

@ 変数はインスタンス変数で、ローカル変数はありません。

詳しくはhttp://ruby.about.com/od/variables/a/Instance-Variables.htmをご覧ください。

于 2013-01-14T13:33:09.620 に答える