2016-07-26 78 views
-1

如果我叫Ruby对象这样可以继承Ruby全局变量吗?

def classA 
    @myvar = "A" 
end 

def classB < classA 
    puts @myvar 
end 

在Ruby中,是不是可以打印和访问@myvar?

+2

有很多事情是错误的,那些不是类的定义,以 – nikkypx

+1

开头。除了'puts',你不会调用任何东西。除了“A”,这里没有Ruby对象,你没有任何意义。 '@ myvar'不是全局变量。 'def'不是类定义。你不能继承方法。请阅读Ruby教程(并密切关注术语)。 – Amadan

+0

在整个问题中,从字面上看并没有一个单词,即使是远程的也没有任何意义。这个问题如何12个小时大,还没有删除? –

回答

0

首先,红宝石类用class关键字定义。 def是为方法。 另外,ruby类的名字应该总是以大写字母开头。

@myvar不是全局变量。 在ruby中,您使用美元符号创建全局变量:$myvar。 at标志给你一个实例变量。 实例变量可用于定义它们的类中的所有方法,但它们需要通过方法进行初始化。 如果你想要一个不需要在方法内初始化的变量,你也可以使用一个类变量,例如@@myar。 只有@@myvar的一个副本存在,在你的类的所有实例之间共享,并且它将由子类继承。

如果你想从类的外部访问变量,你需要一个getter方法来让你访问这个变量。 一个例子是如下

class ClassA 
    @@myvar = "A" 
end 

class ClassB < ClassA 
    def myvar 
    @@myvar 
    end 
end 

b = ClassB.new 
puts b.myvar 
0

你写这样

class A 

end 

class B 

end 

一类,如果你在谈论的全局变量,这样的事情就不够好

class A 
    $var = 1 
end 

现在这$ var无处不在..它穿过墙壁!所以你也可以访问class B

相关问题