草庐IT

ruby - 排序范围值

我想对表示数字范围的字符串数组进行排序,如下所示:b=["0-5","100-250","5-25","50-100","250-500","25-50"]使用sort方法我得到:b.sort#=>["0-5","100-250","25-50","250-500","5-25","50-100"]我想要这样:["0-5,"5-25","25-50","50-100","100-250","250-500"] 最佳答案 尝试:b.sort_by{|r|r.split('-').map(&:to_i)}#=>["0-5","5-25"

ruby - 使用 heredoc 作为哈希值

我有一个方法Embed.toggler接受哈希参数。使用以下代码,我试图在哈希中使用heredoc。Embed.toggler({title:但是,我得到以下错误跟踪:syntaxerror,unexpected':',expectingtSTRING_DENDcontent:content^can'tfindstring"RUBY"anywherebeforeEOFsyntaxerror,unexpectedend-of-input,expectingtSTRING_CONTENTortSTRING_DBEGortSTRING_DVARortSTRING_ENDtitle:如何避免出

ruby-on-rails - 在 ruby​​/rails 中,如何对日期有时可能为空的日期值进行排序?

我想按游戏日期对我的游戏进行排序,但有时游戏日期可能为空,我会得到一个异常:undefinedmethod`to_datetime'fornil:NilClass@games=@teams.reduce([]){|memo,team|memo+team.games}.sort_by(&:game_date)有什么好的方法吗? 最佳答案 如果您只想删除没有日期的条目,最简单的解决方案-ar.select(&:date).sort_by(&:date)在末尾添加nils可以用ar.select(&:date).sort_by(&:dat

ruby-on-rails - 如何计算数组中具有特定属性值的项目?

在我的应用程序中,我有一个名为@apps的数组,它由ActiveRecord加载,其中包含包含应用程序名称、环境等的记录。我目前正在使用@apps.count获取数组中的应用程序数量,但我无法计算数组中environment=0.我尝试了@apps.count(0)但没有成功,因为每条记录都有多个字段。我也试过类似@apps.count{|environment|environment=0}但什么也没发生。有什么建议吗? 最佳答案 只需使用select来缩小您想要的范围:@apps.select{|a|a.environment==

ruby - 在 ruby​​ 中使用带有默认值的选项散列作为参数的一种干净利落的方法是什么

假设我想要一个这样调用的方法:tiger=create_tiger(:num_stripes=>12,:max_speed=>43.2)tiger.num_stripes#willbe12有些选项有默认值:tiger=create_tiger(:max_speed=>43.2)tiger.num_stripes#willhavesomedefaultvalue在方法实现中实现默认行为的惯用ruby​​方法是什么? 最佳答案 deffoo(options={})options={...defaults...}.merge(option

Ruby:如何获取可选 proc 参数的默认值

假设我有一个像这样的proc/lambda/block/method/etc:2.1.2:075>procedure=Proc.new{|a,b=2,*c,&d|42}=>#我知道我可以通过以下方式找出参数的名称:2.1.2:080>procedure.parameters=>[[:opt,:a],[:opt,:b],[:rest,:c],[:block,:d]]但是,如果给定的可选参数未给定,我该如何获取该可选参数的值呢?附言:是的。我知道这在here之前已经被问过/回答过,但之前的解决方案需要使用merbgem,这实际上有点误导。merb本身依赖于methoparagem(除非您使

ruby-on-rails - 是否有返回第一个 truthy 映射值的惯用 ruby​​/rails 方法?

我有一个对象数组,其中一些响应:description,我想从第一个对象中获取真实描述的描述。我可以这样做:objects.detect{|o|o.try(:description)}.description或者这个:objects.map{|o|o.try(:description)}.detect{|o|o}但第一个不是DRY(描述在那里两次),第二个在找到值之前遍历整个数组。ruby标准库或Rails的扩展中是否有任何东西可以让我做这样的事情:objects.detect_and_return{|o|o.try(:description)}我知道我可以很容易地编写它,但标准库足够

ruby - 如何比较 RSpec 中的两个哈希值?

我有两个散列h1和h2我想在RSpec中进行比较。我想检查h1的元素在一些转换后是否与h2相同,我们称之为f。也就是说,我想验证对于h1中的每个键k,h1[k]==f(h2[k])。例如,如果h2中的所有值都是h1中相应值的两倍,那么我想检查每个键k在h1中,h2[k]==h1[k]*2。在RSpec中执行此操作的正确方法是什么?目前我这样做:h1=...expect(h2.all?{|k,v|v==f(h1[k])}).tobetrue但这看起来很笨重。 最佳答案 听起来您正在测试的是转换。我会考虑写这样的东西:it"transf

ruby - 如何获取注入(inject)循环的每个值

我想获取inject的每个值。例如[1,2,3].inject(3){|sum,num|sum+num}返回9,我想获取循环的所有值。我尝试了[1,2,3].inject(3).map{|sum,num|sum+num},但没有成功。我写的代码是这样的,但是我觉得是多余的。a=[1,2,3]result=[]a.inject(3)do|sum,num|v=sum+numresult[4,6,9]有没有办法同时使用inject和map? 最佳答案 使用专用的Eumerator非常适合这里,但我会为此展示更通用的方法:[1,2,3].i

ruby - 如何检查 ruby​​ 方法中可选参数的默认值是多少?

给定一个类,classMyClassdefindex(arg1,arg2="hello")endend是否可以通过Class#instance_method等方法获取arg2的默认值? 最佳答案 似乎我们可以检查方法参数值的唯一方法是访问方法的binding。使用Tracepoint类,我们可以获取这样一个绑定(bind)对象,然后检查所有optional参数的值。我们需要确保只使用必需的参数调用所需的方法,以便为默认参数分配默认值。下面是我尝试这样做的-它适用于实例方法和类方法。为了调用实例方法,我们需要实例化类-如果构造函数需要