如何将ampersand前缀与其他参数一起使用

时间:2013-11-08 23:20:57

标签: ruby proc

这就是我阅读文件的方式:

raw = File.open(fname) { |f| f.read }

我以为我会利用Ruby的快捷方式,例如&运算符将其参数转换为proc。例如,可以使用

nums = gets.split.map &:to_i   # get numbers from stdin

而不是

nums = gets.split.map { |x| x.to_i }

所以,我试过了:

raw = File.open(fname) &:read

我收到了错误:

path/to/file.rb:3:in `<main>': undefined method `&' for #<File:testing.txt> (NoMethodError)

它不适用于括号(raw = File.open(fname)(&:read))。

如何使用此快捷方式打开文件?如果我不能,那为什么不呢?

1 个答案:

答案 0 :(得分:2)

尝试

raw = File.open(fname).read

编辑:问题在于它没有像OP所说的那样关闭文件。

然而,这适用于ruby 1.9.3p448:

raw = File.open(fname, &:read)

这只是为了演示在ruby中使用块的&amp; /符号表示。正如sawa指出的那样,在实际操作中,人们通常会这样做:

raw = File.read(fname)