在此代码中,
working_days = open(ARGV[0].to_s,'r').each_line.map do |line|
do_something
end.compact
map
函数返回数组[1, nil, 3, nil]
。我将compact
添加到关键字end
。我想知道幕后的情况。添加compact
后,返回数组变为:
[1]
→[1,3]
或[1]
→[1, nil]
→[1, nil, 3]
→[1, nil, 3, nil]
→[1, 3]
如何使用pry
检查每一步?
将compact
块与do end
块一起发送到地图功能吗?
答案 0 :(得分:2)
这里没有魔力。您的代码与以下内容相同:
tmp = open(...).each_line.map do |line|
do_something
end
working_days = tmp.compact
您只需删除中间步骤,将map
的返回值指定给临时变量。
这样做的区别......
a(b(c()))
并且这样做:
tmp = c()
tmp = b(tmp)
tmp = a(tmp)
您只是直接在返回值上调用函数,而不是使用第二个语句。
答案 1 :(得分:1)
我不明白为什么你会以复杂的方式思考它。它完成如下:
[1, nil, 3, nil] → [1, 3]
您无法观察到中间步骤。