ruby - 实例变量声明

标签 ruby

以下代码不打印任何内容,我期待着 welcomeBack。请解释。

class Hello

  @instanceHello = "welcomeBack"

  def printHello
    print(@instanceHello)
  end

  Hello.new().printHello();
end

我刚开始学习 ruby​​,所以如果问题看起来很愚蠢,请原谅。

最佳答案

如果关于定义方法和设置变量你只能记住一件事,那就是:总是问自己,此时 self 是什么?

class Hello
  # This ivar belongs to Hello class object, not instance of Hello.
  # `self` is Hello class object.
  @instanceHello = "welcomeBack" 

  def printHello
    # Hello#@instanceHello hasn't been assigned a value. It's nil at this point.
    # `self` is an instance of Hello class
    print @instanceHello
  end

  def self.printSelfHello
    # Now this is Hello.@instanceHello. This is the var that you assigned value to.
    # `self` is Hello class object
    print @instanceHello
  end

end

Hello.new.printHello # >> 
Hello.printSelfHello # >> welcomeBack

如果要为 ivar 设置默认值,请在构造函数中执行:

class Hello

  def initialize
    @instanceHello = "welcomeBack"
  end

  def printHello
    print @instanceHello
  end
end

Hello.new.printHello # >> welcomeBack

关于ruby - 实例变量声明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14033009/

相关文章:

ruby-on-rails - 即使字符串输入小于4,“对于字符变化(4)来说值太长”

ruby-on-rails - Rspec expect( ) 与 expect { }

ruby-on-rails - 多表排序

ruby - Ruby 中的快速(不安全)随机字节生成器

ruby - 如何检查 Ruby 对象是否为 bool 值

ruby-on-rails - 在 Flash 警报 Rails 3 中显示错误消息

ruby-on-rails - Rails 中每个循环的最后一次迭代不要有逗号

ruby - 如何为类似字符串的正则表达式

ruby - rails 加入模块名称

ruby - 如何在不同的 CSV 中分隔包含在 excel 文件中的表格?