【发布时间】:2012-07-16 18:55:29
【问题描述】:
显然,Ruby 可以使代码块返回带有符号的实例变量的值。考虑:
class Person
attr_accessor :fn
end
def give(n,&b)
i=0
while(i<n)
aa = Person.new
aa.fn = "name #{i}"
i=i+1
puts b.call(aa)
end
end
现在,give(5, &:fn) 和 give(5) {|x| x.fn} 都给了
name 0
name 1
name 2
name 3
name 4
=> nil
但是&:fn 的真正含义是什么?我知道&符号可以将 Proc 转换为块,例如
bb = Proc.new {|x| x.fn}
give(5, &bb)
那么:fn这个符号是什么意思呢?我在哪里可以看到这样的使用文档?我们可以使用符号来访问实例变量,比如person:new 或person[:new]?
【问题讨论】:
-
person[:new]将用于访问密钥为符号的哈希 -
@KassymDorsel,谢谢。我知道哈希的情况,但这里它是一个类的对象,'&:fn' 中的符号访问实例变量。
-
和号实际上会将对象转换为
Proc,而:fn只是符号,&:fn相当于&(:fn.to_proc) -
您可以像
give(5, &lambda{ |x| x.fn })一样将 lambda 传递给您的函数,与号是 Ruby 语法的一部分,用于将Proc对象传递给方法(或任何其他具有to_proc方法的对象) . -
@highBandWidth "和'&:fn`中的符号访问实例变量。" 不,不,它调用
fn方法。