【发布时间】:2015-09-30 17:59:59
【问题描述】:
我有一些ConnectFour 类并且我有一个方法:
def apply_move!(column_number, symbol, row_number = 0)
# Some gravity logic
@board[row_number][column_number] = symbol
end
这会修改类。
我尝试在它周围编写一个包装器,它返回一个板并且不更改原始板,以便可以使用函数编程技术。
我的尝试是:
def apply_move(column_number, symbol)
dummy = ConnectFour.new(@board)
dummy.apply_move!(column_number, symbol)
dummy
end
但是麻烦的是修改dummy也会修改原来的类本身!我怎样才能只修改dummy 和dummy?
更多代码和上下文
您可能对以下内容感兴趣:
class CpuWinIfPossible < Player
def decide_move(board)
(0...6).find do |move|
board.apply_move(move, self.symbol).is_won?(self.symbol)
end || (0...6).to_a.sample
end
end
这里我循环并执行apply_move 到我的棋盘,从我上面的定义可以看出,apply_move 不应该改变棋盘,但是棋盘在这段代码运行后显示 7 (+ 1) 个动作:它看起来像这样:
Player X: Where would you like to play (Number from 1 to 7) ?
2
O O
OXOOOO
The winner is O
构造函数
class ConnectFour
attr_accessor :board
def initialize(board)
@board = board
end
【问题讨论】:
-
我不明白你展示的任何方法如何可以改变类。一定有其他事情发生了,你没有向我们展示。另外,“老班”和“新班”是什么意思?我这里只能看到一节课,
ConnectFour。 -
@JörgWMittag 添加了一个重要的方法,可能我的术语并不准确,因为当我说类时,我的意思是包含类的特定实例的变量
-
可以分享
ConnectFour的构造方法吗?我很确定有问题,不要发送@board,而是发送@board.clone或@board.dup -
@Aguardientico 添加了,感谢您的努力,即使我的问题不完整:D
标签: ruby oop functional-programming