Ruby 在类外使用 “@” 符号有什么作用呢?

rimer · 2013年01月15日 · 最后由 rimer 回复于 2013年01月16日 · 2490 次阅读

我在看 redis-rb(https://github.com/redis/redis-rb) 的文档时看到下面的代码:

redis.pipelined do @set = redis.set "foo", "bar" @incr = redis.incr "baz" end

@set.value # => "OK"

@incr.value # => 1

想问一下大家为什么要在 set 变量前加@符号?不在类中的@符号的含义是什么呢?谢谢!

[jasl@Jasl-rMBP:~]$ pry
[1] pry(main)> @x = 1
=> 1
[2] pry(main)> puts self.instance_variables
@x
=> nil
[3] pry(main)> puts self
main
=> nil

不在类中的@符号用来声明 main object 的实例变量 main object 是 ruby 的默认运行上下文,你可以通过写一个只有一行puts self代码的 rb 文件来逮到他

这里的@set变量就相当于 main 这个对象的实例变量,如果 block 里面的 set 没有@的话,set 就只是个局部变量,出了这个 block 就访问不了,而加上@之后,set 就是 main 这个 object 的实例变量,出了 block 也能访问。

1 楼好快好简洁明了...好吧,我输了

我表示只看到了 rMBP...

我是来顶一楼的,很简洁的回答

需要 登录 后方可回复, 如果你还没有账号请 注册新账号