如何按照 Rubocop 的指示将 &:read 作为参数传递给 File.open
How to pass &:read as argument to File.open as indicated by Rubocop
我有这个代码
File.open(file_name, 'r') { |file| file.read }
但 Rubocop 发出警告:
Offenses:
Style/SymbolProc: Pass &:read
as argument to open
instead of a
block.
你是怎么做到的?
我刚刚创建了一个名为 "t.txt" 的文件,其中包含 "Hello, World\n"。我们可以这样解读。
File.open('t.txt', 'r', &:read)
#=> "Hello, World\n"
顺便说一句,因为第二个参数的默认值是'r'
,所以写成:
就足够了
File.open('t.txt', &:read)
这是另一个例子:
"This is A Test".gsub('i', &:upcase)
#=> "ThIs Is A Test"
换句话说,包括过程(例如,&:read
)作为最后一个参数。
File.open(file_name, 'r', &:read)
Rubocop 希望您使用 'symbol to proc' feature in Ruby instead of defining a complete block. This is purely stylistic, and doesn't affect the code execution. You can find it in the Rubocop style guide。
你可以在 RuboCop 的文档中查找攻击,例如Style/SymbolProc – 它通常显示一个 "bad" 和一个 "good" 例如:
# bad
something.map { |s| s.upcase }
# good
something.map(&:upcase)
如果这没有帮助,您可以让 RuboCop auto-correct 进攻(对于像这样支持自动更正的警察)。
给定一个文件 test.rb
:
# frozen_string_literal: true
File.open(file_name, 'r') { |file| file.read }
运行 rubocop -a
:(实际输出取决于你的配置)
$ rubocop -a test.rb
Inspecting 1 file
C
Offenses:
test.rb:3:27: C: [Corrected] Style/SymbolProc: Pass &:read as an argument to open instead of a block.
File.open(file_name, 'r') { |file| file.read }
^^^^^^^^^^^^^^^^^^^^
1 file inspected, 1 offense detected, 1 offense corrected
而test.rb
会变成:
# frozen_string_literal: true
File.open(file_name, 'r', &:read)
我有这个代码
File.open(file_name, 'r') { |file| file.read }
但 Rubocop 发出警告:
Offenses:
Style/SymbolProc: Pass
&:read
as argument toopen
instead of a block.
你是怎么做到的?
我刚刚创建了一个名为 "t.txt" 的文件,其中包含 "Hello, World\n"。我们可以这样解读。
File.open('t.txt', 'r', &:read)
#=> "Hello, World\n"
顺便说一句,因为第二个参数的默认值是'r'
,所以写成:
File.open('t.txt', &:read)
这是另一个例子:
"This is A Test".gsub('i', &:upcase)
#=> "ThIs Is A Test"
换句话说,包括过程(例如,&:read
)作为最后一个参数。
File.open(file_name, 'r', &:read)
Rubocop 希望您使用 'symbol to proc' feature in Ruby instead of defining a complete block. This is purely stylistic, and doesn't affect the code execution. You can find it in the Rubocop style guide。
你可以在 RuboCop 的文档中查找攻击,例如Style/SymbolProc – 它通常显示一个 "bad" 和一个 "good" 例如:
# bad
something.map { |s| s.upcase }
# good
something.map(&:upcase)
如果这没有帮助,您可以让 RuboCop auto-correct 进攻(对于像这样支持自动更正的警察)。
给定一个文件 test.rb
:
# frozen_string_literal: true
File.open(file_name, 'r') { |file| file.read }
运行 rubocop -a
:(实际输出取决于你的配置)
$ rubocop -a test.rb
Inspecting 1 file
C
Offenses:
test.rb:3:27: C: [Corrected] Style/SymbolProc: Pass &:read as an argument to open instead of a block.
File.open(file_name, 'r') { |file| file.read }
^^^^^^^^^^^^^^^^^^^^
1 file inspected, 1 offense detected, 1 offense corrected
而test.rb
会变成:
# frozen_string_literal: true
File.open(file_name, 'r', &:read)