为什么我的 ruby #each 块不能作为单行工作
Why my ruby #each block is not working as a one-liner
这是我写的块:
half.each { |x| array << x count+=1 }
它不是这样工作的,但如果我以 "do...end" 的方式写它,它会很好用:
half.each do |x|
array << x
count+=1
end
这并不重要,因为我可以从长远来看使用我的整个方法,但我想了解 ruby 的单行方法。谢谢 already.And 如果需要,这就是整个方法:
def length_even(array)
half = array[(0...array.length/2)]
count = 0
half.each do |x|
array << x
count+=1
end
p array.drop(count).join
end
half.each { |x| array << x count+=1 }
这里没有分开你的陈述。通常,换行符用作分隔符。但是如果你想把几个语句放在同一行,使用 ;
half.each { |x| array << x; count+=1 }
解决方案
你的方法的目标是什么?
你想把你的阵列一分为二并交换两半吗?
Array#rotate
正是这样做的:
def length_even(array)
array.rotate(array.length/2).join
end
puts length_even([0,1,2,3,4,5]) #=> "345012"
现在你有了你的单线 ;)
备注
如果您在方法的末尾使用 p
,它将始终在 return 之前显示它。它可能并不总是令人满意的。不过,它仍然比 puts
好,因为否则您的方法会 return nil
。
您的代码修改了 array
,您可能不想这样做。
each
return是原来的数组,所以可以用count = half.each{|x| array << x}.size
count
就是1+array.length/2
,所以你也不需要前面的代码。
您可能希望使用带有 space 的连接,以查看 [1,2,3]
和 [12,3]
之间的区别
所以你的代码可以变成:
def length_even(array)
half_size = array.length/2
(array.drop(half_size)+array.take(half_size)).join(' ')
end
这是我写的块:
half.each { |x| array << x count+=1 }
它不是这样工作的,但如果我以 "do...end" 的方式写它,它会很好用:
half.each do |x|
array << x
count+=1
end
这并不重要,因为我可以从长远来看使用我的整个方法,但我想了解 ruby 的单行方法。谢谢 already.And 如果需要,这就是整个方法:
def length_even(array)
half = array[(0...array.length/2)]
count = 0
half.each do |x|
array << x
count+=1
end
p array.drop(count).join
end
half.each { |x| array << x count+=1 }
这里没有分开你的陈述。通常,换行符用作分隔符。但是如果你想把几个语句放在同一行,使用 ;
half.each { |x| array << x; count+=1 }
解决方案
你的方法的目标是什么?
你想把你的阵列一分为二并交换两半吗?
Array#rotate
正是这样做的:
def length_even(array)
array.rotate(array.length/2).join
end
puts length_even([0,1,2,3,4,5]) #=> "345012"
现在你有了你的单线 ;)
备注
如果您在方法的末尾使用
p
,它将始终在 return 之前显示它。它可能并不总是令人满意的。不过,它仍然比puts
好,因为否则您的方法会 returnnil
。您的代码修改了
array
,您可能不想这样做。each
return是原来的数组,所以可以用count = half.each{|x| array << x}.size
count
就是1+array.length/2
,所以你也不需要前面的代码。您可能希望使用带有 space 的连接,以查看
[1,2,3]
和[12,3]
之间的区别
所以你的代码可以变成:
def length_even(array)
half_size = array.length/2
(array.drop(half_size)+array.take(half_size)).join(' ')
end