私はRubyでこのRubyのグローバル変数を継承できますか?
def classA
@myvar = "A"
end
def classB < classA
puts @myvar
end
のようなRubyオブジェクトを呼び出した場合、それは@myvarを印刷し、アクセスすることは可能でしょうか?
私はRubyでこのRubyのグローバル変数を継承できますか?
def classA
@myvar = "A"
end
def classB < classA
puts @myvar
end
のようなRubyオブジェクトを呼び出した場合、それは@myvarを印刷し、アクセスすることは可能でしょうか?
まず、ルビクラスはclass
キーワードで定義されています。 def
は方法です。 また、ルビクラス名は常に大文字で始める必要があります。
@myvar
はグローバル変数ではありません。 ルビーでは、ドル記号($myvar
)を使ってグローバル変数を作成します。 アットマークはインスタンス変数を提供しています。 インスタンス変数は、定義されているクラスのすべてのメソッドで使用できますが、メソッドによって初期化する必要があります。 メソッド内で初期化する必要のない変数が必要な場合は、@@myar
のようなクラス変数を使用することもできます。 @@myvar
のコピーが1つだけ存在し、クラスのすべてのインスタンスで共有され、子クラスによって継承されます。
クラスの外から変数にアクセスするには、変数にアクセスできるようにするゲッターメソッドが必要です。
class ClassA
@@myvar = "A"
end
class ClassB < ClassA
def myvar
@@myvar
end
end
b = ClassB.new
puts b.myvar
を次のように 例があるあなたは、グローバル変数について話している場合は、このようなものは今、この
class A
$var = 1
end
十分でしょう。この
class A
end
class B
end
のようなクラスを書きます$ varはどこからでもアクセスできます。壁を通って移動します!したがって、class B
にアクセスすることもできます。
そこには何かが間違っています。それらは、最初はクラス定義ではありません – nikkypx
あなたは 'puts'を除いてここで何も呼び出していません。ここでRubyオブジェクトはありませんが、あなたは意味をなさない '' A ''を除きます。 '@ myvar'はグローバル変数ではありません。 'def'はクラス定義ではありません。メソッドを継承することはできません。 Rubyのチュートリアルを読んでください(また、用語に細心の注意を払ってください)。 – Amadan
この質問全体には、文字通り、リモートでも意味をなさない単語はありません。この質問は12時間前で、まだ削除されていませんか? –