Ruby で宣言する@var
と、そのクラスのすべてのオブジェクトに独自の@var
.
しかし、私が逃した場合はどうなり@
ますか? var2
つまり、 withoutという変数を宣言しています@
。彼らは変数を共有していますか、それとも一時的に作成されていますか?
Ruby で宣言する@var
と、そのクラスのすべてのオブジェクトに独自の@var
.
しかし、私が逃した場合はどうなり@
ますか? var2
つまり、 withoutという変数を宣言しています@
。彼らは変数を共有していますか、それとも一時的に作成されていますか?
それがないと、@
それが含まれているメソッドの実行が完了すると破棄されます。
class Foo
def initialize
@bing = 123
zing = 456
end
def get_bing
@bing
end
def get_zing
zing
end
end
foo = Foo.new
foo.get_bing #=> 123
foo.get_zing #=> NameError: undefined local variable or method `zing' for #<Foo:0x10b535258 @bing=123>
これは、インスタンス変数@bing
がそのインスタンスとともに保存されていることを示しています。その値は、そのインスタンスの任意のメソッド内でアクセスできます。
ただし、ローカル変数zing
は永続化されず(ほとんどの場合)、メソッドの実行が完了するとすぐにローカル変数は破棄され、アクセスできなくなります。を実行するget_zing
と、という名前のローカル変数またはメソッドが検索されますが、 fromが長い間使用されzing
ていないため、検索されません。zing
initialize
変数がスコープ プレフィックス ( @
- インスタンス、@@
- クラス、または$
- グローバル) なしで宣言されている場合、現在のスコープに対して宣言されます。つまり、次のようになります。
class Foo
def boo
@boo ||= 'some value'
var ||= 40
puts "boo: #@boo var: #{var}"
end
def foo
var ||= 50
puts "boo: #@boo var: #{var}"
end
end
c = Foo.new
c.boo # => boo: some value var: 40
c.foo # => boo: some value var: 50
def foo
$var ||= 30
puts "$var: #$var"
end
foo # => $var: 30
puts "$var: #$var" # => $var: 30
%w[some words].each do |word|
lol = word # blocks introduce new scope
end
puts lol # => NameError: undefined local variable or method `lol'
for word in %w[some words]
lol = word # but for loop not
end
puts lol # => words
これは、ローカル字句スコープに属するローカル変数になります。
元。
class Foo
def Bar
@fooz = 1
end
def Barz
fooz = 2
end
def test
puts @fooz
end
end
f = Foo.new
f.Bar
f.test
f.Barz
f.test
出力:
1
1 #not 2
と呼ばれる変数を使用する場合、var2
それはローカルであり、それが宣言されている構造のスコープ内にのみあります。あれは:
class Foo bar = 2 end Foo.new NameError: undefined local variable or method 'bar'