草庐IT

Switch-case

全部标签

ruby-on-rails - Ruby case 语句未按预期执行

仅供引用,使用Rails。给定user=User.find(1)当它应该返回self.do_something_with_user的结果时,这个case语句返回nil。defcase_methodcaseself.classwhenUserself.do_something_with_user#assumedoesnotreturnnilwhenSomeOtherClassself.do_something_elseelsenilendenduser.case_method#=>nil我错过了什么?使用pry,self.class==User返回true。

ruby - 在多个条件下使用 'case'

我正在尝试编写一个案例陈述,它着眼于两种情况,如下所示:roll1=rand(1..6)roll2=rand(1..2)result=case[roll1,roll2]when[1..3&&1]"Low/Low"when[4..6&&1]"High/Low"when[1..3&&2]"Low/High"when[4..6&&2]"JACKPOT!!"endputsresult我很乐意让这个工作。我更愿意了解我的示例失败的原因。编辑添加:感谢所有反馈!受到启发,我意识到结合这两个case变量可以让我将它们折叠成一个简单的switch语句的值...roll1=rand(1..6)roll2

ruby-on-rails - 在 Ruby 中,有没有比 'case - when' 更优雅的调用方法的替代方法?

在Rails3.1中,我想通过使用接受参数数据的create方法来创建一个嵌入式对象,但我想知道是否有比下面的case方法更优雅的方法:defmethod_call(obj,data)caseobjwhen'a'thenUser.create_a(data)when'b'thenUser.create_b(data)when'c'thenUser.create_c(data)endend我真的很想做类似下面的事情,但是由于我传递的数据,这会导致错误:defmethod_call(obj,data)User.send("create_#{obj}")(data)end有什么建议吗?提前致

将 snake_casing 转换为 PascalCasing 的 Ruby 正则表达式?

我创建了一个使用以下函数的网络框架:defto_class(text)text.capitalizetext.gsub(/(_|-)/,'')end将snake_cased或hyphen-cased的目录名称转换为项目的PascalCased类名。问题是,该函数只删除了_和-,并没有将下一个字母大写。使用.capitalize或.upcase是否有办法将您的snake/hyphen_/-cased名称转换为正确的PascalCased类名? 最佳答案 gsub(/(?:^|[_-])([a-z])?/){$1.upcaseunles

ruby - Ruby Switch 中的返回命令?

我想从我的Case语句中返回一个值,我需要执行不止一行代码,所以“then”对我不起作用。使用Return退出Case语句所在的函数。是否有一个关键字可以帮助我的代码清楚地暗示我要返回的内容,而不仅仅是在最后一行放置一个值?complexity=case(scale)when"gtp"x=[variouslinesofcode]x=[variouslinesofcode]10when"preSi"x=[variouslinesofcode]x=[variouslinesofcode]30when"postSi"x=[variouslinesofcode]x=[variouslineso

ruby-on-rails - ruby 中 case when 语句的替代方案

我正在根据散列值分配一组值。我必须根据传入哈希键的值将值分配给另一个哈希键。传入的哈希中有超过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'

ruby - 有没有比使用自定义 case 语句更实用的方法来用 Ruby 编写这个?

想象一下下面的代码:classSimpleLetterdefvalues("a".."z").to_aenddef===(other)values.include?(other)endendclassVowel我本可以选择任何其他类(class),我只是以它们为例。我非常喜欢Scala的match和提取器,我认为这可能是用Ruby编写相同内容的好方法。有没有更好的方法来编写上面的代码而不必实例化新对象以便我可以调用它们的===方法?为了避免不必要的帖子,是的,我知道我可以这样做:caseletterwhen["a","e","i","o","u"].include?(letter)#.

ruby - 如何在单个对象中封装许多 Ruby case 条件?

我想简化在多个条件适用时执行单个操作的代码。这是一个简化的示例:casebuttonwhen'up','upper-right','right','lower-right','down','lower-left','left','upper-left'move_direction(button)elsedo_something_elseend如果我可以将这些选项封装到类或常量之类的东西中,那将会很有帮助,但我不确定该怎么做,或者是否有可能。如何封装这些条件? 最佳答案 您可以只使用数组splat。VALID_DIRECTION=%w

ruby - 为什么 switch 语句执行相等性测试的方式与 if 语句不同?

为什么if语句在下面的示例中有效,而switchstatement没有。工作:if''.class==Stringputs"yep,that'sastring"end不工作:case''.classwhenStringputs"yep,that'sastring,butthiscaseisnevertriggered"end在上面的简单示例中,switch语句有点矫枉过正,但显然在某些情况下switch语句比链式elsifs更DRYer 最佳答案 实际上,ruby的“case”与===进行了比较所以你的例子等同于:if''.clas

ruby - 写一个更好的 switch-case 函数?

我是一个Ruby新手。我怎样才能为这个功能写得更好?我可以改用哈希表吗?defreadable_status(status)ifstatus=="1"return"go"endifstatus=="2"return"stop"endifstatus=="3"return"die"endend 最佳答案 如果您想使用散列(根据您的问题),您可以这样做:defreadable_status(status)readable={"1"=>"go","2"=>"stop","3"=>"die"}readable[status]||"defau