我目前是一名通过集团的学生,并与班级方法斗争。我正在复习每一种方法的课程。说明书的第一部分是:
让我们将这个新的每一个技巧与我们一直在练习的一些概念结合起来。创建一个Class类。它应该将数组作为其ArrayModifier函数的参数,并有一个实例方法:
initialize--循环遍历数组并返回每个元素的新数组,并添加感叹号。
到目前为止,我是这么想的,但我不知道我做错了什么。我特别不明白初始化和如何正确使用它。

class ArrayModifier

  attr_accessor :array

  def initialize(array)
    @array = array
  end

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

end

最佳答案

使用initialize是正确的。它所要做的就是捕获并保存发送进来的数组。如果你想成为花花公子,你可以写

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对象,并能够对其进行进一步的操作。

关于ruby - 每种方法都有Ruby类方法:通过Bloc学习新手,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25822537/

10-11 22:09
查看更多