Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/tensorflow/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 新手rails逻辑&;句法问题_Ruby On Rails - Fatal编程技术网

Ruby on rails 新手rails逻辑&;句法问题

Ruby on rails 新手rails逻辑&;句法问题,ruby-on-rails,Ruby On Rails,我正在学习rails,遇到了以下我想使用的代码。问题代码是John F Miller在以下链接中的答案(第一个答案): 按照逻辑,我无法理解从数组“堆栈”中删除最后一项的目的 ruby 1.9之后似乎不再支持此上下文中的此命令。我相信我们的目的是回到循环的开始,然后重复 retry 除第零个元素外,包含所有元素的“子阵列” Ruby中的负数组索引-x是长度-x的缩写。也就是说,-1的第一个元素是最后一个。范围1..-1是“从第一个到最后一个”,但由于数组在Ruby中是零索引的,这意味着“除第

我正在学习rails,遇到了以下我想使用的代码。问题代码是John F Miller在以下链接中的答案(第一个答案):

按照逻辑,我无法理解从数组“堆栈”中删除最后一项的目的

ruby 1.9之后似乎不再支持此上下文中的此命令。我相信我们的目的是回到循环的开始,然后重复

retry
除第零个元素外,包含所有元素的“子阵列”

Ruby中的负数组索引
-x
长度-x
的缩写。也就是说,
-1
的第一个元素是最后一个。范围
1..-1
是“从第一个到最后一个”,但由于数组在Ruby中是零索引的,这意味着“除第零个元素外的所有元素”

堆栈保存“您有多深”,更准确地说,是您当前所在的元素。在检查下一个元素时,如果您“外出”,则应在添加当前项之前关闭您留下的列表(可能多次!)

至于
重试
:我认为应该是
重做
。如果你走到外面,你必须确保关闭你必须关闭的每一个列表:每次迭代你从堆栈弹出一次,关闭最近的列表并循环这个列表,直到你在堆栈的顶部元素中,在当前节点插入的上下文中

实际上,代码假定只有一棵树的根是
set[0]
。通过在第6行添加检查(使用
|
),如果堆栈为空,则可以消除此缺陷,需要手动按下
设置[0]
,从而将其从循环中排除因为如果堆栈为空,则您处于包含所有内容的超空间中,因此您不必费心比较任何内容。这使您可以从一个列表中呈现多个元素树(可能没有公共根)


我相信解决这个问题的干净方法是递归的,用Ruby的调用堆栈取代“自制堆栈”。不过,我想不出一个太快的解决方案。

谢谢您的宝贵反馈。从我读到的内容来看,重试和重做是不同的:@user1567212它们是,
retry
现在主要用于异常处理,从我所看到的。我的下一个挑战是按字母顺序显示叶节点。我最初的想法是这将是一个三步的过程。(1) 修改上述内容,将节点读入多维数组,(2)对数组中的元素进行排序,(3)循环数组以输出html。这听起来对吗?@user1567212我将在数据库级别强制执行该命令。挖掘gem的来源可能会有所帮助。我会试试。@user1567212检查:这不是数据库级别,但应该可以工作。和你的建议相似。
set[1..-1].each do |node|
stack.pop
retry