如何在Ruby中创建一个取数组平均值的函数?
我试过这样的方法:如何在Ruby中创建一个取数组平均值的函数?,ruby,Ruby,我试过这样的方法: def average_array_float(&array) array.inject{ |sum, el| sum + el }.to_f / array.size end 没有成功 array = [1, 2, 3] def even_numbers(array) array.select { |num| num.even? } end p array.even_numbers 答复: $ bundle exec ruby main.rb Tra
def average_array_float(&array)
array.inject{ |sum, el| sum + el }.to_f / array.size
end
没有成功
array = [1, 2, 3]
def even_numbers(array)
array.select { |num| num.even? }
end
p array.even_numbers
答复:
$ bundle exec ruby main.rb
Traceback (most recent call last):
main.rb:7:in `<main>': private method `even_numbers' called for [1, 2, 3]:Array (NoMethodError)
exit status 1
$bundle exec ruby main.rb
回溯(最近一次呼叫最后一次):
main.rb:7:in`':为[1,2,3]:数组(NoMethodError)调用的私有方法“偶数”
退出状态1
我做错了什么?必须将数组传递给方法:
def even_numbers(array)
array.select { |num| num.even? }
end
array = [1, 2, 3, 4, 5, 6]
even_numbers(array)
#=> [2, 4, 6]
发生示例中的NoMethodError
是因为如果在顶级定义方法,它将成为对象的私有方法:
Object.private_methods
#=> [:initialize, :inherited, :method_added, :method_removed, :method_undefined,
# :remove_const, :initialize_copy, :initialize_clone, :using, :public,
# :ruby2_keywords, :protected, :private, :included, :extended, :prepended,
# :even_numbers, :sprintf, :format, ...]
# ^^^^^^^^^^^^^
由于数组
是一个对象
,因此它可以(私下)访问该方法
如果确实要将方法添加到数组
,可以打开相应的类:
class Array
def even_numbers
select { |num| num.even? }
end
end
这给了你:
[1, 2, 3, 4, 5, 6].even_numbers
#=> [2, 4, 6]
然而,尽管这是可行的,但不建议修改非您自己的对象,更不用说Ruby的核心类了
关于其他方法,您可以使用和:
或者,如果您喜欢精确的结果:
def average(array)
array.sum.quo(array.size)
end
average([1, 2, 4])
#=> (7/3)
你好有关Stackoverflow的问题应采用英语。请改掉它。好的!我忘了。翻译我认为你应该包括完整的代码,包括类(如果存在)和偶数方法
def average(array)
array.sum.quo(array.size)
end
average([1, 2, 4])
#=> (7/3)