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

rimer · January 15, 2013 · Last by rimer replied at January 16, 2013 · 2491 hits

我在看 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...

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

You need to Sign in before reply, if you don't have an account, please Sign up first.