我正在尝试用红宝石写一个战舰游戏。我遇到了一个我认为我掌握的代码片段,但希望大家都能提供一些澄清。 [-1,0,1]
是扔我的东西。这是检查2D阵列。一如既往地感谢您的帮助。
def neighbors
@neighbors ||= [-1, 0, 1].repeated_permutation(2).map do |dx, dy|
@grid[x + dx, y + dy] unless dx.zero? && dy.zero?
end.compact
end
我想我最终可能已经弄明白了。 repeated_permutation(2)
使用[-1,0,1]
中的值来搜索"单元格"问题。
答案 0 :(得分:0)
如果||=
响应@neighbors
(nil
)对象类型或NilClass
(false
)对象值,FalseClass
意味着什么?它将采用您在右侧分配的值来表示以下结果:
[-1, 0, 1].repeated_permutation(2).map do |dx, dy|
@grid[x + dx, y + dy] unless dx.zero? && dy.zero?
end.compact
使用||=
就像使用x || x = a
或x = a unless x
一样,但是以Ruby的方式易于阅读,易于理解,易于使用。
[-1, 0, 1].repeated_permutation(2).map
尝试做的是将repeated_permutation
的结果映射到[-1, 0, 1]
数组上,并在排列中取第一个和第二个值,然后设置您的@grid
变量可能(因为我不能说出@grid
}作为一个范围,从dx
加上x
开始,然后{ {1}}加dy
,除非y
和dx
的值同时为dy
(0
)。然后&&
"映射"结果
答案 1 :(得分:0)
快速&脏排列就像一系列数字的微小变化([链接到更深入])1。您正在查看的是由.repeated_permutations
更改的数组,以查找每个值的所有选项&然后将结果添加到原始x& y coords ...
|| =&除非部分只是检查以确保代码不在0的运行...