Ruby がdef
キーワードを検出すると、スコープが変更されます。変数にはメソッド外のblah
ローカル スコープがあるため、その値を使用する場合は、それを渡す必要があります。
blah
変数をインスタンス変数に変更できます。これは、記述されているメソッドのスコープ内にあります。
変数のスコープを変更するよりも、ローカル変数を渡す方がよいでしょう。
メソッド名には、一般に「ブール値」を示す疑問符が付いています。厳密には指定されていませんが、それはtrue
orの戻り値になりますが、それが戻る場合や真false
の戻り値の場合に使用されることがわかります。nil
コードは次のように書くのが最適かもしれません:
def what(blah)
blah
end
それが役立つことを願っています。
編集: 親変数に対処するには、親関係を導入する必要があります。
# encoding: utf-8
class ParentBlah
def initialize
@blah = "Blah"
end
end
class ChildBlah < ParentBlah
def use_parent_variable_sorta
"@blah = #{@blah}"
end
end
childblah = ChildBlah.new
puts childblah.use_parent_variable_sorta
これで、ローカル変数を使用できない理由について説明できますが、これは厳密にはスコープの問題です。ここで行ったことを行うには、同じスコープで変数を作成する必要がありました。
なぜこれが行われるのですか?オブジェクトの外部のロジックは、オブジェクトによって本質的に認識される必要がないためです。知る必要がある場合は、引数を介して値のみを導入するか、スコープを変更する必要があります。この目的のためにスコープを変更する必要がある場合、何か他のことが起こっている可能性があると考える傾向があります。