我在一个each循环(或其他类型的循环)中将元素推入其中之前定义了一个包含空对象的变量,如下所示:
foo = []
collection.each do |item|
foo << item
end
foo
Run Code Online (Sandbox Code Playgroud)
或者像这样:
foo = []
count = 0
collection.each do |item|
count += 1
raise ArgumentError if count > 10
foo << item
end
foo
Run Code Online (Sandbox Code Playgroud)
但是,foo或者count经常出现并使代码混乱.有没有一种方法可以缩短这段代码?我想相信第一个foo可以放在循环中运行一次.
你可以使用注入方法:
foo = collection.inject([]) {|sum, item| sum << item }
Run Code Online (Sandbox Code Playgroud)
single-line block只是一个Ruby风格,喜欢{...}在do...end单行块.无论是多行还是单行块,您也可以使用do...end,但对于多行块,do...end则更好.
foo = collection.inject([]) do |sum, item|
sum << item
end # This is ok, but `{...}` looks better.
Run Code Online (Sandbox Code Playgroud)
多行:
foo = collection.inject([]) do |sum, item|
# line 1
# line 2
# and more
end
Run Code Online (Sandbox Code Playgroud)
对于Ruby风格,您可以从The Ruby Style Guide获得更多信息
| 归档时间: |
|
| 查看次数: |
668 次 |
| 最近记录: |