我正在根据散列值分配一组值。我必须根据传入哈希键的值将值分配给另一个哈希键。传入的哈希中有超过10个键(因此超过10个案例)。我想最小化代码。对于这种情况,是否有其他方法可以缩短代码。@hash1.eachdo|h1|caseh1.mapped_fieldwhen'value1'@hash2[h1.field_id]=value_1when'value2'@hash2[h1.field_id]=value_2when'value3'@hash2[h1.field_id]=value_3when'value4'@hash2[h1.field_id]=value_4when'value5'
这可以重构为boolean值吗?board是一个数组,move是一个索引。position_taken?(board,move)应该返回false如果board[move]是"",""或nil但返回true如果board[move]是"X"或“O”。defposition_taken?(board,move)ifboard[move]==""falseelsifboard[move]==""falseelsifboard[move]==nilfalseelsetrueendend 最佳答案 由于您的正面案例越来越少,我会测试相反的情
想象一下下面的代码:classSimpleLetterdefvalues("a".."z").to_aenddef===(other)values.include?(other)endendclassVowel我本可以选择任何其他类(class),我只是以它们为例。我非常喜欢Scala的match和提取器,我认为这可能是用Ruby编写相同内容的好方法。有没有更好的方法来编写上面的代码而不必实例化新对象以便我可以调用它们的===方法?为了避免不必要的帖子,是的,我知道我可以这样做:caseletterwhen["a","e","i","o","u"].include?(letter)#.
我想简化在多个条件适用时执行单个操作的代码。这是一个简化的示例:casebuttonwhen'up','upper-right','right','lower-right','down','lower-left','left','upper-left'move_direction(button)elsedo_something_elseend如果我可以将这些选项封装到类或常量之类的东西中,那将会很有帮助,但我不确定该怎么做,或者是否有可能。如何封装这些条件? 最佳答案 您可以只使用数组splat。VALID_DIRECTION=%w
我写过这样的东西,我从VisualBasic6.0知道的相同的if-else逻辑,但我确信有更好的“Ruby方式”来编写它。你能告诉我它在Ruby世界里会是什么样子吗?ifparams[:medication_name].nil?med_name='all'elsifparams[:medication_name]=='undefined'med_name='all'elsemed_name=params[:medication_name]end 最佳答案 有几种不同的方法可以简化它,例如:med_name=params[:medi
对于Ruby中的Hash,reject!和reject与delete_if有何不同?谁能用简单的代码片段解释它们之间的区别? 最佳答案 由于其他答案指的是Array#delete_if而不是Hash#delete_if,这似乎是你要问的,我想我应该澄清一下。正如其他人所指出的,reject和reject!的不同之处在于reject!版本就地修改哈希,而reject创建一个新的散列。同时,delete_if几乎与reject!相同。事实上,对于一个Array,reject!和delete_if完全是一样的。但是,对于Hash,它们略有
有没有类似这样的代码的快捷方式?deftestobj=get_from_somewhere()ifobjtrueelsefalseendend在Python中,我可以这样做:returnTrueifobjelseFalse 最佳答案 一个常见的Ruby习惯用法是:deftest!!get_from_somewhereenddoublebang将一个对象变成它的“bool等价物”:object='foo'!object#=>false!!object#=>true请注意,在Ruby中,与Python不同,只有false和nil在boo
这个条件有没有更好的写法?if(self.expense.nil?&&self.income.nil?)||(!self.expense.nil?&&!self.income.nil?)puts"test"end 最佳答案 您正在测试表达式是否都为真或都为假。试试这个:if(self.expense.nil?==self.income.nil?)你不关心它们是真还是假,只关心它们是一样的。 关于ruby-on-rails-更好的写if条件的方法,我们在StackOverflow上找到一个
使用50个if-else语句对于一项操作来说是否过于耗费资源?我正在做这样的事情:ifteam.players.count>1assign_team_type(..)elsifteam.players.count>3assign_team_type(..)...etc....end此外,将50个if-else语句放在Controller内的create操作中而不是after_create方法是否更有效?还是改用caseswitch语句或完全避免使用它会更有效?编辑:感谢您的快速回复!该代码用于社区体育锦标赛,根据该队的球员人数分配球队。我正在尝试编写一些东西,根据添加到该团队的玩家数量
为什么if语句在下面的示例中有效,而switchstatement没有。工作:if''.class==Stringputs"yep,that'sastring"end不工作:case''.classwhenStringputs"yep,that'sastring,butthiscaseisnevertriggered"end在上面的简单示例中,switch语句有点矫枉过正,但显然在某些情况下switch语句比链式elsifs更DRYer 最佳答案 实际上,ruby的“case”与===进行了比较所以你的例子等同于:if''.clas