2016-02-19 113 views
1

我很難理解codecademy中的兩行代碼。我很難理解一些Ruby代碼

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是什麼?

+3

'Prime'是一個來自ruby stdlib的類:http://ruby-doc.org/stdlib-2.3.0/libdoc/prime/rdoc/Prime.html –

回答

7

素數是一個普遍的概念,並且您不需要考慮在每次使用它的代碼時創建枚舉數/素數集的不同實例。 (理想情況下,)它應該可以媲美模塊在其上調用單的方法,如/方法:

Math.sin(0) 

,而不是錯誤的形式:

Math.new.sin(0) 

然而,Prime下課了(錯誤地)設計,可以使用象在後者上面的形式:

Prime.new.each(30) 

與那裏只有素枚舉(即,Prime是一個單獨的類)的單個實例。因此,對於歷史的原因,這種用法保持(最多紅寶石2.2),但後來發現,因爲它是一個單身,應該鼓勵替代newinstance

Prime.instance.each(30) 

與類,包括Singleton模塊做。

關於您的first n,它需要枚舉器中的第一個n元素。

+1

在Ruby 2.3中,'Prime'包含'Singleton'並且不允許'Prime.new'。 – Stefan

3

Prime是一個Ruby類。通過調用prime = Prime.instance,您正在實例化Prime類中名爲prime的對象,該對象基本上是所有素數的集合。該對象具有Prime類的公共方法,包括#first,它們在提出參數(n)時將返回前n個素數的數組。