繁体   English   中英

红宝石:块中的执行顺序

[英]ruby: execution order in block

我了解此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)

pushunshift视为带有参数并将传递给它的元素放入列表的函数; 然后shiftpop作为删除和返回元素的函数。

如果我使用类似c的函数语法编写正在发生的事情,则会得到:

playlist.push(playlist.shift())

playlist.unshift(playlist.pop())

因此,它将从内到外解决这些函数调用,您将获得所看到的行为。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM