我理解这个skip_tracks方法中发生了什么,但是,我从来没有用这种方式编写它,因为我不理解块中行为的基本规则。这是令我困惑的部分
skip.times { playlist.push playlist.shift}
是否存在从右到左执行的规则,以便将返回的值返回并推送到播放列表?如何知道将被转移到播放列表中的价值?为了使这成为一个规则,块内发生了什么?你能解释一下吗...另外,如果这个块已被多行写入,playlist.push会高于playlist.shift,因此首先执行,但是此代码要求在推送之前移动该值
def skip_tracks(playlist, skip)
if skip > 0
skip.times { playlist.push playlist.shift}
else
skip.abs.times { playlist.unshift playlist.pop }
end
puts playlist
end
playlist = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l']
skip_tracks(playlist, 2)
答案 0 :(得分:1)
将push
和unshift
视为接受参数的函数,并将传递给它的元素放入列表中;以及shift
和pop
作为删除和返回元素的函数。
如果我使用类似c的函数语法编写正在发生的事情,你会得到:
playlist.push(playlist.shift())
和
playlist.unshift(playlist.pop())
因此,它将从内到外解决这些函数调用,并获得您看到的行为。