Ruby每个块,都不返回值

时间:2017-11-07 15:01:21

标签: ruby each block

以下代码不起作用,问题是在calc_fitness方法内部,每个块都没有返回值,我不知道为什么

# takes an array, splices them into groups of 2 and returns a sum of values read from the matrix
def calc_fitness(hypothesis_arr)
   hypothesis_arr.each_slice(2).to_a.map{|v| $distances[v.first,v.last]}
end

def main

  # filling the matrix, with random values
  $distances = create_sym_matrix
  p calc_fitness((0..99).to_a) 
end

main
# => [67,67,67,67....67,] #these should not be the same, which means i  the block alway returns the same value. Why?

1 个答案:

答案 0 :(得分:1)

这是因为each返回自身(Enumerator的一个实例)而each_slice返回nil。

https://ruby-doc.org/core/Enumerable.html#method-i-each_slice

您可以尝试将each更改为map

为了简化并了解生成的内容,我使用了:

(1..99).to_a.each_slice(2).map { |v| { first: v.first, last: v.last } }
=> [{:first=>1, :last=>2}, {:first=>3, :last=>4}, {:first=>5, :last=>6}, {:first=>7, :last=>8}, {:first=>9, :last=>10}, {:first=>11, :last=>12}, {:first=>13, :last=>14}, {:first=>15, :last=>16}, {:first=>17, :last=>18}, {:first=>19, :last=>20}, {:first=>21, :last=>22}, {:first=>23, :last=>24}, {:first=>25, :last=>26}, {:first=>27, :last=>28}, {:first=>29, :last=>30}, {:first=>31, :last=>32}, {:first=>33, :last=>34}, {:first=>35, :last=>36}, {:first=>37, :last=>38}, {:first=>39, :last=>40}, {:first=>41, :last=>42}, {:first=>43, :last=>44}, {:first=>45, :last=>46}, {:first=>47, :last=>48}, {:first=>49, :last=>50}, {:first=>51, :last=>52}, {:first=>53, :last=>54}, {:first=>55, :last=>56}, {:first=>57, :last=>58}, {:first=>59, :last=>60}, {:first=>61, :last=>62}, {:first=>63, :last=>64}, {:first=>65, :last=>66}, {:first=>67, :last=>68}, {:first=>69, :last=>70}, {:first=>71, :last=>72}, {:first=>73, :last=>74}, {:first=>75, :last=>76}, {:first=>77, :last=>78}, {:first=>79, :last=>80}, {:first=>81, :last=>82}, {:first=>83, :last=>84}, {:first=>85, :last=>86}, {:first=>87, :last=>88}, {:first=>89, :last=>90}, {:first=>91, :last=>92}, {:first=>93, :last=>94}, {:first=>95, :last=>96}, {:first=>97, :last=>98}, {:first=>99, :last=>99}]

现在,我不确定分配给$distances的功能正在做什么。您可能希望为此提供代码,或者提供有关您尝试完成的更多详细信息。