gpt4 book ai didi

带有每个方法的 Ruby 类方法 : newbie learning through Bloc

转载 作者:数据小太阳 更新时间:2023-10-29 08:46:42 25 4
gpt4 key购买 nike

我目前是 Bloc 的一名学生,正在努力学习类方法。我正在学习关于 Each Method 的类(class)。说明的第一部分是:

Let's mix this new each trick with some of the Class concepts we've been practicing. Create an ArrayModifier class. It should take an array as an argument to its initialize function, and have one instance method:

  • exclaim -- Loops through the array and returns a new array of each element with an exclamation mark added.

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

class ArrayModifier

attr_accessor :array

def initialize(array)
@array = array
end

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

end

最佳答案

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

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 类方法 : newbie learning through Bloc,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25822537/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com