2016-07-26 6 views
-1

私はRubyでこのRubyのグローバル変数を継承できますか?

def classA 
    @myvar = "A" 
end 

def classB < classA 
    puts @myvar 
end 

のようなRubyオブジェクトを呼び出した場合、それは@myvarを印刷し、アクセスすることは可能でしょうか?

+2

そこには何かが間違っています。それらは、最初はクラス定義ではありません – nikkypx

+1

あなたは 'puts'を除いてここで何も呼び出していません。ここでRubyオブジェクトはありませんが、あなたは意味をなさない '' A ''を除きます。 '@ myvar'はグローバル変数ではありません。 'def'はクラス定義ではありません。メソッドを継承することはできません。 Rubyのチュートリアルを読んでください(また、用語に細心の注意を払ってください)。 – Amadan

+0

この質問全体には、文字通り、リモートでも意味をなさない単語はありません。この質問は12時間前で、まだ削除されていませんか? –

答えて

0

まず、ルビクラスは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 
0

を次のように 例があるあなたは、グローバル変数について話している場合は、このようなものは今、この

class A 
    $var = 1 
end 

十分でしょう。この

class A 

end 

class B 

end 

のようなクラスを書きます$ varはどこからでもアクセスできます。壁を通って移動します!したがって、class Bにアクセスすることもできます。

関連する問題