Ruby块(需要解决方案)

贾斯汀

问题看起来像这样:

在类Range方法中编写todown的行为如下(使用block_given?和yield函数):

(3..5).todown {| i | 打印“ hi#{i}”}#打印hi5 hi4 hi3

(2 ... 7).todown #prints 65432

经过至少一个小时的谷歌搜索后,我仍然无法解决此问题。我已经做到了这一点:

class Range
 def todown
     to_a.reverse.each do |i|
       yield(i)
   end
  end
 end

我不知道在哪里添加(2..7).todown行以获得所需的结果。

卡里·斯沃夫兰(Cary Swoveland)

编辑:

我意识到这个问题只是一种练习,但是在修改Ruby的核心类时应该非常小心。是讨论“金钱修补”风险的许多文章之一,以及在核心类补丁爆炸时可以采取的使风险最小化或使调试更容易的步骤。

现在,我们有一个(颇有争议的)替代方法,称为“精炼”。改进是v2.0的实验性补充。然后在v2.1中对其进行了修改并将其永久化。这是它在这里的工作方式。

首先,我们refine在模块中创建一个类:

module M  
  refine Range do
    def todown
      reverse_each do |i|
        case block_given?
        when true then yield(i)
        else print i
        end
      end
      puts
    end
  end
end

让我们尝试一下:

(2...7).todown
  #-> NoMethodError: undefined method `todown' for 2...7:Range

哎呀!我们已经创建了优化功能,但尚未激活它。为此,我们使用关键字using

using M
(2...7).todown
  #-> 65432
(3..5).todown { |i| print "hi#{i} " }
  #-> hi5 hi4 hi3 

我在优化中添加了一个方法,但是您可以添加,修改,重命名或删除现有的实例或类方法,添加常量,等等。

最后一件事:细化在IRB中似乎不起作用。:浪潮]

您可以这样做:

class Range
  def todown
    f,l = first,last
    l -= 1 if exclude_end?
    if block_given?
      while l >= f
        yield(l)
        l -= 1
      end
    else
      s = ''
      while l >= f
        s << l.to_s
        l -= 1
      end
      puts(s)
    end
  end
end

(2...7).todown
  #-> 65432
(3..5).todown { |i| print "hi#{i} " }
  #-> hi5 hi4 hi3 

尽管有些长,但是您会看到Ruby的大多数内置方法(用Ruby而不是C编写)都是以类似的方式构造的,以尽可能减少对其他类中方法的依赖。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

需要'System.IndexOutOfRangeException'解决方案

来自分类Dev

需要Grails搜索功能/解决方案

来自分类Dev

转发HLS流-需要解决方案

来自分类Dev

需要Str_replace解决方案

来自分类Dev

需要缓解部分的解决方案

来自分类Dev

ListNode解决方案需要说明

来自分类Dev

需要帮助来了解Ruby气泡排序解决方案中的语法/逻辑

来自分类Dev

我的asp.net MVC解决方案需要一个缓存解决方案

来自分类Dev

缺少整数变化-需要O(n)解决方案

来自分类Dev

需要更好的解决方案以从javascript文件附加html

来自分类Dev

Java-需要MySQL并发解决方案

来自分类Dev

插入时需要mysql事件的最佳解决方案?

来自分类Dev

需要一个简单的编程逻辑解决方案。

来自分类Dev

Django Fixtures主键错误,需要自然键解决方案

来自分类Dev

项目Euler解决方案8,需要说明

来自分类Dev

数据库设计需要更好的解决方案

来自分类Dev

需要解决方案C ++循环和条件

来自分类Dev

C#逻辑(编码中需要的解决方案)

来自分类Dev

验证解决方案逻辑时需要的建议

来自分类Dev

我需要使用绘图功能的替代解决方案

来自分类Dev

需要关于符合 SCORM 的学习解决方案的建议

来自分类Dev

需要非负和浮动解决方案

来自分类Dev

需要具有 CSS 对齐属性的解决方案

来自分类Dev

Ruby on Rails解决方案的LAMP等效术语

来自分类Dev

最佳时间买卖股票Ruby解决方案的说明

来自分类Dev

Ruby Monk Number Shuffle-解决方案比较

来自分类Dev

递归解决方案?

来自分类Dev

解决方案的投影

来自分类Dev

Mathematica解决方案?