我在看 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 文件来逮到他
puts self
这里的@set变量就相当于 main 这个对象的实例变量,如果 block 里面的 set 没有@的话,set 就只是个局部变量,出了这个 block 就访问不了,而加上@之后,set 就是 main 这个 object 的实例变量,出了 block 也能访问。
1 楼好快好简洁明了...好吧,我输了
我表示只看到了 rMBP...
我是来顶一楼的,很简洁的回答
#1 楼 @jasl 顶一楼的
#1 楼 @jasl #2 楼 @sailtsao 谢谢你们!