如何修复ruby中返回的不匹配对象类型?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何修复ruby中返回的不匹配对象类型?相关的知识,希望对你有一定的参考价值。
我正在使用ruby2d进行开发和应用。
我有一个函数应该返回一个类为“Tile”的对象。
将返回的对象是“tileStone”,当它在函数内部时,它的类是“Tile”(我使用了一些“puts”来打印这些信息)。但是,当它返回main函数时,它将返回“Ruby2D :: Window :: EventDescriptor”对象。为什么?
def player1turn(grid)
tileStone = stoneChose(1,grid)
puts tileStone.class #here it prints "Ruby2D::Window::EventDescriptor", which is wrong
end
def stoneChose(nplayer,grid)
Window.on :mouse do |event|
case event.button
when :left
grid.movableStone(grid.getPlayer(nplayer)).each do |tileStone|
if tileStone.contains? event.x, event.y
puts tileStone.class #here it prints "Tile"
tileStone
end
end
end
end
end
答案
我不熟悉ruby2d
,但似乎Window.on
只放置一个事件监听器/处理程序,并返回EventDescriptor
。接下来,当事件被触发时,将执行on
中的代码。因此,您的函数stoneChose
只是设置此事件侦听器并返回此描述符类实例。
您可以在这个ruby2d
查看Pong game项目的一般架构。简而言之:
1)您必须先设置所有事件监听器
def setup
Window.on :mouse do |event|
case event.button
when :left
grid.movableStone(grid.getPlayer(nplayer)).each do |tileStone|
if tileStone.contains? event.x, event.y
doSmthWithTileStone(tileStone)
end
end
end
end
2)定义一个函数,该函数在每个事件上对找到的对象执行一些操作
def doSmthWithTileStone(tileStone)
puts tileStone
end
3)并做主app循环
def main
setup
update do
...
end
end
main
以上是关于如何修复ruby中返回的不匹配对象类型?的主要内容,如果未能解决你的问题,请参考以下文章