我正试图在这里清理这个非常丑陋的方法,它迫切需要重构,但我不确定哪种结构最能做到这一点(即case语句,或者只是一个精心格式化的ifthen语句)乍一看,这似乎是一个理想的放置case语句的地方,带有一些放置得很好的when,但我的理解是case语句只能用于单个变量,而不是两个变量,以及使用散列或数组尝试这些语句的irb的各种摆弄在这里也没有太多说明。你会怎么做?在检查这样的多个bool值时,Ruby中是否有任何常见的技巧来避免这样的代码?defhas_just_one_kind_of_thing?(item,controller)if(controller=='foos'&&item
是否有rubygem/插件可以将*/10***1,3转换为“周一、周三每10分钟触发一次”? 最佳答案 我什么都不知道,我也没有用谷歌找到任何东西。不过,您也许可以自己破解一些东西:>>cron="*/10***1,3foo"#=>"*/10***1,3foo">>min,hour,dom,month,dow,command=cron.split#=>["*/10","*","*","*","1,3","foo"]一旦你有了变量,你就可以开始组装输出的部分了:>>require'date'#=>true>>dow.split(/
我正在使用Ruby1.9.3和Rails3.0.9构建一个应用程序我有一个像下面这样的类。moduleCDAclassDocumentdefhumanize_class_nameself.class.name.gsub("::","")endendend我想要像“CDADocument”这样的类名。我的humanize_class_name方法是实现此目的的正确方法吗?或Rails是否还有其他可用的内置方法? 最佳答案 如果您使用i18n,您可以调用Model.model_name.human来获取本地化的模型名称。例如:Event
我正在使用Intridea的ActsasReadable我目前正在构建的消息系统的Rails插件。我已经相应地定义了我的消息类:classPost一切似乎都按计划进行,但当我试图让应用程序在我的消息View中显示未读消息时,我遇到了问题。他们的示例:(由于格式问题,我已将下划线更改为连字符)bob=User.find_by_name("bob")bob.readings#=>[]Post.find_unread_by(bob)#=>[,,...]Post.find_read_by(bob)#=>[]Post.find(1).read_by?(bob)#=>falsePost.find(
在Ruby中是否有内置的打印可读矩阵的方法?例如require'matrix'm1=Matrix[[1,2],[3,4]]printm1让它显示=>1234在REPL中代替:=>Matrix[[1,2][3,4]]matrix的Ruby文档让它看起来像应该显示的那样,但这不是我所看到的。我知道编写一个函数来执行此操作是微不足道的,但如果有“正确”的方法,我宁愿学习! 最佳答案 您可以将其转换为数组:m1.to_a.each{|r|putsr.inspect}=>[1,2][3,4]编辑:这是一个“无积分”版本:putsm1.to_a
如何将列表变成逗号分隔的字符串,并在数组中的最后一个元素之前加上“and”?像这样:list1=['a','b','c']然后把它变成这样:=>"a,b,andc"我记得ruby有一个方法可以做到这一点。然而我已经搜索过了,并没有找到它。感谢您的帮助。 最佳答案 尝试:[list[0...-1].join(","),list.last].join(",and")。编辑:Rails有您可能正在寻找的方法,称为to_sentence.如果您没有Rails或不想依赖Rails,请打开Array类并包含上述方法,例如:classArra
有没有办法让inspect的输出更具可读性?在Perl中,有Data::Dumper使输出更易于阅读。 最佳答案 ruby标准库包含PP(“PrettyPrint”的缩写),其格式结构比标准inspect好得多:http://www.ruby-doc.org/stdlib/libdoc/pp/rdoc/index.html您需要在源文件的顶部require'pp'才能使用它,然后只需将pobj替换为ppobj在你的代码中。我发现它对散列和数组特别有用! 关于Ruby检查可读性?,我们在S
我正在尝试找到生成以下输出的最佳方法jobtook30secondsjobtook1minuteand20secondsjobtook30minutesand1secondjobtook3hoursand2minutes我开始这段代码deftime_range_detailstime=(self.created_at..self.updated_at).countsync_time=casetimewhen0..60then"#{time}secs"else"#{time/60}minunte(s)and#{time-min*60}seconds"endend有没有更有效的方法呢?看起
这是我想要显示的内容:May13,2012这是显示的内容:2012-05-13我搜索了一些答案,结果找到了“FormattingDatesandFloatsinRuby”,其中提到了一个可能的解决方案:然而,这根本不会改变输出。没有调试错误,也没有引发异常。我可以做到,而且效果很好:这是我的迁移文件(查看我使用的数据类型):classCreateNewsItems 最佳答案 Date.to_s与Time.to_s不同。您的postdate是一个Date,因此您可能需要查看strftime相反:postdate.strftime("%
在JavaScript中,代码格式的标准规则似乎并没有削减它。你最终还是会得到乱七八糟的});});,我什至不相信我什至都不知道正确缩进声明为其他函数参数的匿名函数的既定规则。简而言之,我在阅读自己的JavaScript时遇到困难,而且我敢打赌我并不孤单。我认为我要接受的想法是不要在其他函数中定义函数。将带有名称的每个函数作为子项写入脚本标记。当你需要传递函数时,使用它们的名字。当然,这使得使用闭包变得更加困难[编辑:如果您以这种方式编写代码,则根本无法使用闭包]。另外,这可能会导致内存管理出现问题?还有其他人对此有想法吗? 最佳答案