【问题标题】:Ruby Class Method with Each Method : newbie learning through BlocRuby Class Method with Each Method : 新手通过 Bloc 学习
【发布时间】:2014-09-13 11:01:18
【问题描述】:

我目前是 Bloc 的学生,并且正在努力使用类方法。我正在完成有关“每种方法”的课程。说明的第一部分是:

让我们将这个新的每一个技巧与我们一直在练习的一些Class 概念结合起来。创建一个ArrayModifier 类。它应该将一个数组作为其initialize 函数的参数,并具有一个实例方法:

  • exclaim -- 循环遍历数组并返回每个元素的新数组,并添加感叹号。

这是我到目前为止的想法,但我不知道我做错了什么。我特别不明白初始化以及如何正确使用它。

class ArrayModifier

  attr_accessor :array

  def initialize(array)
    @array = array
  end

  def exclaim
    @array.each do |i|
      puts i + "!"
    end
    @array
  end

end

【问题讨论】:

  • “返回”是模棱两可的。在您的代码尝试中,您 puts 每个元素,而不是 returning 他们。很高兴知道这个问题问的是什么。
  • 什么是 Bloc? .....
  • @sawa 我想it is this
  • 我认为你得到了反对和标记,因为这是一个非常简单的问题。它甚至没有展示该语言的一些最基本的基础。不管投票结果如何,我认为你应该接受你得到的答案,并考虑如何自己完成这项研究。

标签: ruby methods


【解决方案1】:

您对初始化的使用是正确的。它所要做的就是捕获并保存传入的数组。如果你想花哨,你可以写

def initialize( arr )
  raise ArgumentError unless arr.is_a?(Array)
  @array = arr
end

毕竟,如果我们没有传入一个实际的数组,那么所有即将发生的事情都会失败。当您进入更高级的编程时,您会看到这种模式。

但是puts 不会“返回”东西,只会“打印”出来,让实际返回值@array 与以前相同。

您正在学习 each,但是当您阅读有关该方法的文档时,您会发现它具有类似行为的“表兄弟”。我认为在这种情况下你想使用map:

def exclaim
  @array.map do |i|
    "#{i}!"
  end
end

这会获取数组中的每个元素,将其插入到一个字符串中,该字符串的后缀为“!” String interpolation 是零安全的,这使其成为简洁的最佳实践。由于这个数组修改是方法中唯一的表达式,它是方法的return 结果。

irb 调试器会将.exclaim 的结果打印到屏幕上,但其他 Ruby 代码会将这个 return 捕获为 ruby​​ 对象,并能够对其进行进一步操作。

【讨论】:

    【解决方案2】:

    看句子:

    循环遍历数组并返回每个元素的新数组,并添加感叹号。

    它不要求您打印数组的每个元素。它要求您返回一个“新”数组,其中所有元素都添加了一个感叹号。

    class ArrayModifier
    
      attr_accessor :array
    
      def initialize(array)
        @array = array
      end
    
      def exclaim
        new_array = []
        @array.each do |i|
          new_array << i.to_s + "!"
        end
        new_array
      end
    end
    

    感叹方法的更好替代方法:

    def exclaim
      @array.map{|e| "#{e}!"}
    end
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-12-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-09-26
      相关资源
      最近更新 更多