我正在尝试将以下代码翻译成 ruby:
public void discardWeapon(Weapon w){
if(!weapons.isEmpty()){
boolean discarded = false;
Iterator<WeaponType> it = weapons.iterator();
while(it.hasNext() && !discarded){
WeaponType wtaux = it.next();
if(wtaux == w.getWeaponType()){
it.remove();
discarded = true;
}
}
}
}
但是,当谈到 while 循环时,我真的找不到在 ruby 中实现它的实用方法。到目前为止,我有以下结构:
def discardWeapon(w)
if(!@weapons.empty?)
discarded = false
@weapons.each do |wtaux|
end
end
end
但是,在使用 .each 迭代器时如何检查我的条件是否满足? 提前致谢。
最佳答案
我不确定我是否正确阅读了你的 Java 代码,但我觉得你有一个实例变量 @weapons
包含一组武器,而你想要丢弃一个武器实例来自该列表的武器 w
。
def discard_weapon(weapon)
index = @weapons.index(weapon)
@weapons.delete_at(index) if index
end
Array#index
返回第一个匹配项的索引。和 Array#delete_at
找到元素时删除索引处的元素。
当相同的武器可能多次包含在数组中并且您想丢弃所有匹配的武器时,您可以使用以下单行代码:
def discard_weapon(weapon)
@weapons.delete(weapon)
end
关于java - ruby 中的条件和迭代器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60929182/