我很难理解codecademy中的两行代码。
require 'prime'
def first_n_primes(n)
"n must be an integer" unless n.is_a? Integer
"n must be greater than 0" if n <= 0
prime = Prime.instance
prime.first n
end
first_n_primes(10)
您能否解释一下Prime.instance
的含义以及prime.first n
是什么?
答案 0 :(得分:7)
素数是一个普遍的概念,每次使用代码时,您都不需要考虑创建枚举器/素数集的不同实例。 (理想情况下)它应该与您调用单例方法的模块/方法相当:
Math.sin(0)
而不是错误的形式:
Math.new.sin(0)
然而,Prime
类被(错误地)设计为像上面的后一种形式一样被使用:
Prime.new.each(30)
只有一个主要枚举器实例(即Prime
是一个单例类)。因此,出于历史原因,保留了这种用法(直到Ruby 2.2),但后来注意到,由于它是单例,因此应鼓励将new
替换为instance
:
Prime.instance.each(30)
与包含Singleton
模块的类一样。
关于first n
,它需要枚举器中的第一个n
元素。
答案 1 :(得分:3)
Prime是一个Ruby类。通过调用prime = Prime.instance
,您将实例化prime
类的Prime
对象,该对象基本上是所有素数的集合。该对象具有类Prime
的公共方法,包括#first
,当呈现参数(n)
时,将返回前n个素数的数组。