11

我刚刚阅读了以下代码:

class Dir
   def self.create_uniq &b  ### Here, & should mean b is a block
      u = 0
      loop do
      begin
         fn = b[u]   ### But, what does b[u] mean? And b is not called.
         FileUtils.mkdir fn
         return fn
      rescue Errno::EEXIST
         u += 1
      end
    end
    io
  end
end

我把我的困惑作为代码中的注释。

4

2 回答 2

12

最后定义方法&b允许您使用传递给方法的块作为Proc对象。

现在,如果您有Proc实例,[]语法是以下的简写call

p = Proc.new { |u| puts u }
p['some string']
# some string
# => nil

记录在这里->Proc#[]

于 2013-10-15T08:31:55.187 回答
1

& 前缀运算符允许方法将传递的块捕获为命名参数。例如:

def wrap &b
  3.times(&b)
  print "\n"
end

现在如果你像这样调用上面的方法:

wrap { print "Hi " }

那么输出将是:

Hi Hi Hi
于 2014-01-03T12:21:45.530 回答