【发布时间】:2020-03-30 11:03:52
【问题描述】:
我正在尝试将以下代码翻译成 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 迭代器时检查我的条件是否满足? 提前致谢。
【问题讨论】:
-
为什么不在您的迭代中使用
break if discarded之类的东西? -
与其尝试逐行逐字逐句翻译,不如仔细考虑函数实际上试图实现什么。 Ruby 是一门非常简洁优雅的语言;您可能可以使用 ruby 用一小部分代码编写丑陋的 java。
-
这个怎么样:
discarded = false; @weapons.delete_if { |weapon| discarded = true if !discarded && weapon.type == w.type } -
如果找到函数
myArray.delete_at(myArray.index(n) || myArray.length),这似乎可以解决问题。谢谢你们!
标签: java arrays ruby iterator conditional-statements