Ruby类方法与每个方法:通过Bloc学习新手

Ruby类方法与每个方法:通过Bloc学习新手,ruby,methods,Ruby,Methods,我目前是一名通过Bloc学习的学生,正在努力学习课堂教学方法。我正在复习每种方法的课程。说明的第一部分是: 让我们将每个新技巧与我们一直在练习的一些类概念结合起来。创建一个ArrayModifier类。它应该将数组作为其initialize函数的参数,并具有一个实例方法: 感叹号——在数组中循环并返回添加感叹号的每个元素的新数组 到目前为止,我的想法是这样的,但我不知道我做错了什么。我特别不了解初始化以及如何正确使用它 class ArrayModifier attr_accessor

我目前是一名通过Bloc学习的学生,正在努力学习课堂教学方法。我正在复习每种方法的课程。说明的第一部分是:

让我们将每个新技巧与我们一直在练习的一些
概念结合起来。创建一个
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
看看这句话:

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

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

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 initialize( arr )
  raise ArgumentError unless arr.is_a?(Array)
  @array = arr
end
毕竟,如果我们没有传入一个实际的数组,那么所有即将到来的事情都将失败。当您进入更高级的编程时,您将看到这种模式

但是
put
不会“返回”东西,只会“打印”出来,让实际返回值
@array
与以前一样

您正在学习每个,但是当您阅读关于该方法的文档时,您会发现它有类似的“表亲”。我认为在这种情况下,您希望使用
映射

def exclaim
  @array.map do |i|
    "#{i}!"
  end
end
这将获取数组中的每个元素,将其插入到一个字符串中,该字符串的后缀带有字符“!”是零安全的,这使它成为简洁性的最佳实践。由于此数组修改是该方法中的唯一表达式,因此它是该方法的
return
结果


irb
调试器将把
.equirm
的结果打印到屏幕上,但其他Ruby代码将捕获该
并将其作为Ruby对象返回
,并能够对其进行进一步操作

“返回”是不明确的。在代码尝试中,
放入每个元素,而不是
返回它们。很高兴知道这个问题的目的是什么。什么是集团@sawa我想我认为你得到了反对票和旗帜,因为这是一个非常简单的问题。它甚至缺乏对语言的一些最基本基础的证明。然而,仔细投票后,我认为你应该回答你所得到的答案,并考虑一下你是如何独立完成这项研究的。
def exclaim
  @array.map do |i|
    "#{i}!"
  end
end