Ruby 如何将符号和前缀与其他参数一起使用

Ruby 如何将符号和前缀与其他参数一起使用,ruby,proc,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 我得到了一个错误:

以下是我读取文件的方式:

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)
path/to/file.rb:3:in`':用于#(NoMethodError)的未定义方法`&'
它也不适用于括号(
raw=File.open(fname)(&:read)

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

试试看

raw = File.open(fname).read
编辑:问题是它没有关闭文件,如OP所述

但是,这在ruby 1.9.3p448中也可以使用:

raw = File.open(fname, &:read)
这只是为了演示在ruby中使用块的&/symbol表示。正如sawa指出的,在实际操作中,通常会:

raw = File.read(fname)

嗯,我不知道这件事。酷。另外,.只是一个小小的澄清:我相信
到_proc
<代码>&是proc-to_块。@Cary Swoveland
是符号文字的一部分
&
to_proc
to block。不要养成在生产环境中尝试
读取
文件的习惯,除非您知道这些文件永远不会超过流程的可用RAM,否则您的机器将陷入爬行状态,您的用户和系统管理员将追捕您
读取
“slurps”文件,这通常不是什么大优势。正如@sawa在下面的评论中指出的那样,
File.read(fname)
是正确的方法。您所做的不是惯用的,可能会导致维护问题。@sawa,谢谢您给我澄清。我应该先检查一下。这不能关闭文件。@Doorknob:你说得对。然而,
raw=File.open(fname,&:read)
确实有效;不知道为什么它不适合你。你有什么版本的ruby?啊,显然它能用。因为某种原因,我测试它的时候没有。也许是打字错误?无论如何,谢谢!答案是可以的,但是更简洁的打开文件的方法是
raw=file.read(fname)
@sawa是,为了完整性,应该在答案中说明这一点。谢谢