加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

Ruby变量的可见性

发布时间:2020-12-17 03:54:54 所属栏目:百科 来源:网络整理
导读:如果我在 Ruby中声明@var,那个类的每个对象都有自己的@var. 但如果我想念@怎么办?我的意思是,我声明了一个名为var2的变量而没有@.他们共享变量还是暂时创建的? 解决方法 当声明变量没有作用域前缀(@ – instance,@@ – class或$ – global)时,则声明当前作
如果我在 Ruby中声明@var,那个类的每个对象都有自己的@var.

但如果我想念@怎么办?我的意思是,我声明了一个名为var2的变量而没有@.他们共享变量还是暂时创建的?

解决方法

当声明变量没有作用域前缀(@ – instance,@@ – class或$ – global)时,则声明当前作用域,即:

class Foo
  def boo
    @boo ||= 'some value'
    var ||= 40

    puts "boo: #@boo var: #{var}"
  end

  def foo
    var ||= 50

    puts "boo: #@boo var: #{var}"
  end
end

c = Foo.new
c.boo # => boo: some value var: 40
c.foo # => boo: some value var: 50

def foo
  $var ||= 30

  puts "$var: #$var"
end

foo # => $var: 30

puts "$var: #$var" # => $var: 30

%w[some words].each do |word|
  lol = word # blocks introduce new scope
end

puts lol # => NameError: undefined local variable or method `lol'

for word in %w[some words]
  lol = word # but for loop not
end

puts lol # => words

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读