class Hello
@hello = "hello"
def display
puts @hello
end
end
h = Hello.new
h.display
我创建了上面的类。它不会打印出任何东西。我以为实例变量@hello是在类声明期间设置的。但是当我调用display方法时,输出是'nil‘。这样做的正确方法是什么?
发布于 2009-05-05 20:22:25
您需要添加一个initialize
方法:
class Hello
def initialize
@hello = "hello"
end
def display
puts @hello
end
end
h = Hello.new
h.display
发布于 2009-05-05 20:38:17
代码中的第一个@hello
称为类实例变量。
它是常量Hello
指向的类对象的实例变量。(它是Class
类的一个实例。)
从技术上讲,当您在class
作用域中时,您的self
被设置为当前类的对象,而@variables
属于您当前的self
。天哪,我真不会解释这些事情。
你可以通过观看this collection of $5-each screencasts from The Pragmatic Programmers得到所有这些和更多的澄清。
(或者你可以在这里要求澄清,我会尝试更新。)
发布于 2011-02-20 23:56:16
我还建议查看以"@@“为前缀的类变量-以下是一些示例代码,向您展示类变量和实例变量的不同之处:
class Vars
@@classvar="foo"
def test
@instancevar="bar"
end
def Vars.show
puts "classvar: #{@@classvar}"
puts "instancevar: #{@instancevar}"
end
def instance_show
puts "classvar: #{@@classvar}"
puts "instancevar: #{@instancevar}"
end
end
# only shows classvar since we don't have an instance created
Vars::show
# create a class instance
vars = Vars.new
# instancevar still doesn't show b/c it hasn't been initialized
vars.instance_show
# initialize instancevar
vars.test
# now instancevar shows up as we expect
vars.instance_show
https://stackoverflow.com/questions/826734
复制相似问题