Ruby 如何递归调用块并返回值
骑士移动是骑士在其他位置的一系列实例 如果我同时打印出knight.position和target,有时它们相等,但该方法不会返回任何结果 我认为这与块如何处理返回有关,但我还没有弄清楚 我的代码如下所示:Ruby 如何递归调用块并返回值,ruby,recursion,Ruby,Recursion,骑士移动是骑士在其他位置的一系列实例 如果我同时打印出knight.position和target,有时它们相等,但该方法不会返回任何结果 我认为这与块如何处理返回有关,但我还没有弄清楚 我的代码如下所示: def dfs_rec knight, target if knight if knight.position == target return knight end moves = knight.moves.size - 1 moves
def dfs_rec knight, target
if knight
if knight.position == target
return knight
end
moves = knight.moves.size - 1
moves.times do |num|
dfs_rec knight.moves[num], target
end
end
end
为什么不重构成更像这样的东西呢
class Knight
def at_position?(target_position)
position == target_position
end
def can_move_to?(target_position)
moves.include?(target_position)
end
end
# to find a knight in an array of knights that can move to `position`
knights.select { |knight| knight.can_move_to?(position) || knight.at_position?(position) } #=> [ <Knight>, <Knight> ]
您没有从块显式调用return,因此行为应该是相同的。它似乎对我有效,我尝试以dfs\u recOpenStruct.newposition:1调用,它返回了OpenStruct实例。@kris如果第一个对象匹配,它就可以工作,但不是之后。我现在看到迭代器将递归调用视为任何其他方法。我需要在全球范围内把骑士们召集到某个阵型中去做我想做的事。是的,我可能会这样做。谢谢@robert Great-如果这回答了您的问题,请继续接受,并在左侧打勾,以便其他用户知道您已经准备好了。