@title
とはどう違いtitle
ますか?どちらも変数名になる可能性があるためです。また、使用する変数の種類をどのように決定すればよいですか? あり@
ますか?
7 に答える
title
ローカル変数です。それらはそのスコープ内にのみ存在します(現在のブロック)
@title
はインスタンス変数であり、クラス内のすべてのメソッドで使用できます。
ここで詳細を読むことができます: http://strugglingwithruby.blogspot.dk/2010/03/variables.html
Ruby on Rails の場合 - コントローラーで変数をインスタンス変数 ( @title
) として宣言すると、ビューで使用できるようになります。
ビューで変数を使用できるようにする場合は、コントローラーで使用@title
します。
説明は、これ@title
はインスタンス変数でtitle
あり、ローカル変数です。Rails は、テンプレート コード (erb、haml など) が現在のコントローラー インスタンスのスコープ内で実行されるため、コントローラーのインスタンス変数をビューで使用できるようにします。
違いは、変数のスコープにあります。@version は、クラス インスタンスのすべてのメソッドで使用できます。
簡単な答えは、コントローラーを使用していて、ビューで変数を使用できるようにする必要がある場合は、@variable
.
より長い答えについては、これを試してください:http://www.ruby-doc.org/docs/ProgrammingRuby/html/tut_classes.html
@variable
s は 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
がクラス内の別のメソッドでアクセスされます。しかし、同じことはローカル変数ではアクセスできません。
ローカル変数は、その初期化のブロック内からのみアクセスできます。また、ローカル変数は小文字 (az) またはアンダースコア (_) で始まります。
また、インスタンス変数はのインスタンスでself
あり、a で始まり@
ます。また、インスタンス変数はオブジェクト自体に属します。.send
インスタンス変数は、ieなどでメソッドを実行するものです
例:
@user = User.all
は@user
インスタンス変数です
また、初期化されていないインスタンス変数の値はNil
@ 変数はインスタンス変数で、ローカル変数はありません。
詳しくはhttp://ruby.about.com/od/variables/a/Instance-Variables.htmをご覧ください。