Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我可以声明Ruby类成员吗?_Ruby_Class_Member - Fatal编程技术网

我可以声明Ruby类成员吗?

我可以声明Ruby类成员吗?,ruby,class,member,Ruby,Class,Member,在Java中,我可以声明一个类的公共成员,但在Ruby中我似乎不能这样做 class Person @a = 1 def hello() puts(@a) end end p = Person.new p.hello() #nil 为什么输出nil而不是1 class Person @a = 1 def hello() puts(@a) end end pr = Person.new pr.instance_variable_get(:@a) #

在Java中,我可以声明一个类的公共成员,但在Ruby中我似乎不能这样做

class Person
  @a = 1

  def hello()
    puts(@a)
  end
end

p = Person.new
p.hello()  
#nil

为什么输出
nil
而不是
1

class Person
@a = 1
  def hello()
    puts(@a)
  end
end

pr = Person.new
pr.instance_variable_get(:@a) # => nil
现在见下文:-

class Person
  def initialize(a)
    @a=a
  end
  def hello()
    puts(@a)
  end
end

pr = Person.new(1)
pr.instance_variables # => [:@a]
Person.instance_variables # => []
pr.instance_variable_get(:@a) # => 1
pr.hello # => 1

实例变量的名称以@开头,其作用域仅限于自身引用的对象。两个不同的对象,即使它们属于同一个类,也允许它们的实例变量具有不同的值。从对象外部,实例变量不能被改变,甚至不能被观察(即,ruby的实例变量从来都不是公共的),除非程序员显式提供任何方法。与全局变量一样,实例变量在初始化之前具有nil值


现在看这里:-

class Person
@a = 1
  def self.hello()
    puts(@a)
  end
end
Person.hello # => 1
Person.instance_variables # => [:@a]
Person.new.instance_variables # => []

因此,在本例中,@a是对象
Person
的实例变量,而不是
Person
的实例。这里有非常好的提示-。

,因为实例变量@a没有为实例
pr
初始化

class Person
@a = 1
  def hello()
    puts(@a)
  end
end

pr = Person.new
pr.instance_variable_get(:@a) # => nil
现在见下文:-

class Person
  def initialize(a)
    @a=a
  end
  def hello()
    puts(@a)
  end
end

pr = Person.new(1)
pr.instance_variables # => [:@a]
Person.instance_variables # => []
pr.instance_variable_get(:@a) # => 1
pr.hello # => 1

实例变量的名称以@开头,其作用域仅限于自身引用的对象。两个不同的对象,即使它们属于同一个类,也允许它们的实例变量具有不同的值。从对象外部,实例变量不能被改变,甚至不能被观察(即,ruby的实例变量从来都不是公共的),除非程序员显式提供任何方法。与全局变量一样,实例变量在初始化之前具有nil值


现在看这里:-

class Person
@a = 1
  def self.hello()
    puts(@a)
  end
end
Person.hello # => 1
Person.instance_variables # => [:@a]
Person.new.instance_variables # => []

因此,在本例中,@a是对象
Person
的实例变量,不是
Person
的实例。这里有很好的提示-。

这里是对类和实例变量的一个很好的解释这里是对类和实例变量的一个很好的解释,这意味着我在声明时不能初始化实例变量?这意味着我在声明时不能初始化实例变量?