我很难理解一些Ruby代码

Pen*_*nny 1 ruby

我很难理解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)
Run Code Online (Sandbox Code Playgroud)

你能解释一下什么Prime.instance意思和内容prime.first n是什么?

saw*_*awa 7

素数是一种普遍的概念,每次使用代码时,您都不需要考虑创建枚举器/素数集的不同实例.(理想情况下)它应该与您调用单例方法的模块/方法相当:

Math.sin(0)
Run Code Online (Sandbox Code Playgroud)

而不是错误的形式:

Math.new.sin(0)
Run Code Online (Sandbox Code Playgroud)

但是,Prime类(不正确)设计为像上面的后一种形式一样使用:

Prime.new.each(30)
Run Code Online (Sandbox Code Playgroud)

只有一个主要枚举器的实例(即,Prime是一个单例类).因此,由于历史原因,这种用法被保留(直到Ruby 2.2),但后来注意到,因为它是一个单例,所以应该鼓励它替换newinstance:

Prime.instance.each(30)
Run Code Online (Sandbox Code Playgroud)

与包含Singleton模块的类一样.

关于你的first n,它需要n来自枚举器的第一个元素.