首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >什么时候设置Ruby实例变量?

什么时候设置Ruby实例变量?
EN

Stack Overflow用户
提问于 2009-05-05 20:16:00
回答 3查看 44.2K关注 0票数 67
代码语言:javascript
复制
class Hello
@hello = "hello"
    def display
        puts @hello
    end
end

h = Hello.new
h.display

我创建了上面的类。它不会打印出任何东西。我以为实例变量@hello是在类声明期间设置的。但是当我调用display方法时,输出是'nil‘。这样做的正确方法是什么?

EN

回答 3

Stack Overflow用户

发布于 2009-05-05 20:22:25

您需要添加一个initialize方法:

代码语言:javascript
复制
class Hello
    def initialize
        @hello = "hello"
    end
    def display
        puts @hello
    end
end

h = Hello.new
h.display
票数 45
EN

Stack Overflow用户

发布于 2009-05-05 20:38:17

代码中的第一个@hello称为类实例变量。

它是常量Hello指向的类对象的实例变量。(它是Class类的一个实例。)

从技术上讲,当您在class作用域中时,您的self被设置为当前类的对象,而@variables属于您当前的self。天哪,我真不会解释这些事情。

你可以通过观看this collection of $5-each screencasts from The Pragmatic Programmers得到所有这些和更多的澄清。

(或者你可以在这里要求澄清,我会尝试更新。)

票数 24
EN

Stack Overflow用户

发布于 2011-02-20 23:56:16

我还建议查看以"@@“为前缀的类变量-以下是一些示例代码,向您展示类变量和实例变量的不同之处:

代码语言:javascript
复制
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
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/826734

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档