2016-01-24 33 views
0

RubyMonk着重說明如何使用下劃線來方便編寫大量數字,這些數字在沒有劃分的情況下會變得難以閱讀。一種創建巨大數字的方法

他們的任務是:嘗試使用下劃線來創建一個巨大的,可讀的數字。他們提供此代碼:

def describe(something) 
    puts "I am a: #{something.class} and I look like: #{something}" 
end 

def big_num 
    # create a huge number 
end 

describe(big_num) 

任何人都可以解釋我將如何去創造一個巨大的數字?根據下面的錯誤消息,我必須在代碼中使用下劃線來使其通過。

+0

'1000 == 1_000',所以'1_000_000_000' .. 。這是Ruby允許我們使用的下劃線符號(爲了方便起見)。 – Myst

+2

什麼錯誤信息? – sawa

+1

呃。 'Bignum'和'Fixnum'是實現性的,優化的,它們確實不應該在Ruby課程中教授,特別是不適合初學者。 Ruby只保證有一個'Integer'類,它允許但不要求也不指定一個或多個特定於實現的子類。 –

回答

2

RubyMonk預計Bignum類的對象,這是標準Ruby庫的一部分。從文檔:

Bignum對象擁有Fixnum範圍之外的整數。當整數計算 否則溢出Fixnum時,將自動創建對象 。

所以你只需要創建一個比Fixnum可以處理的數字更大的數字。例如,這將通過RubyMonk的規格:

def big_num 
    5_000_000_000_000_000_000_000 
end 

由於數量是大於Fixnum對象可以處理,紅寶石自動地返回Bignum的來代替。例如,嘗試運行此:

5_000_000_000.class 
# => Fixnum 
5_000_000_000_000_000_000_000.class 
# => Bignum 
+0

我試着簡單地在方法中寫入1_000_000_000。 RubyMonk返回這些錯誤1)是一個Bignum 2)RSpec :: Expectations :: ExpectationNotMetError 3)期望1000000000是一種Bignum - – beetlehope

+0

@newbie RubyMonk期望類Bignum的一個對象。我解釋了我的編輯回覆中發生了什麼。 – brito

+0

謝謝,現在很清楚! – beetlehope

1

Ruby允許您在寫入字面數字時加上下劃線,以便大數字更容易閱讀。

的約定去,你不應該把下劃線如果數量爲4個或更少位長和每三個數字,如果是更長的時間,從右側開始:

10_000_000 # => 10000000 

Works的浮點數太:

1_2_3_4_5 # => 12345 
10_000.0 # => 10000.0 

的下劃線被解釋,如果你把他們兩個數字之間忽略


查看錯誤消息後,顯然RubyMonk期望Bignum。這是另一種神奇的,這解釋不透 - 如果數量足夠小,可以映射到架構的INT,數量是Fixnum一個實例:

100.class # => Fixnum 

如果情況並非如此,紅寶石自動地使用專用類(Bignum):

(10_000_000**100).class # => Bignum 
    # 10_000_000 to the power of 100, 
    # which is a very big number and 
    # thus stored in Bignum 
+0

我試着簡單地在方法內寫入1_000_000_000。 RubyMonk返回這些錯誤1)是一個Bignum 2)RSpec ::期望:: ExpectationNotMetError 3)預計1000000000是一種Bignum – beetlehope

+0

@newbie,更新了我的答案。 – ndn

2

紅寶石允許使用下劃線作爲佔位符(即他們只增加了人類可讀性和以其他方式忽略)。所以你big_num方法可以簡單地有一行:

return 1_000_000_000_000_000_000_000_000_000_000_000 

,並呼籲將返回1000000000000000000000000000000000

(該return關鍵字是可選的)

+2

爲什麼你會建議在這裏使用可選的'return'知道(希望)它不是傳統的? –

+0

OP似乎是Ruby的新手,所以他們可能會或可能不知道Ruby將返回沒有顯式'return'的值。包括它清楚(呃)線路在做什麼(特別是如果OP的背景是需要它的語言的話),括號裏指出它是可選的,所以如果他們現在還不知道它們的話。另請參閱http://stackoverflow.com/questions/1023146/is-it-good-style-to-explicitly-return-in-ruby關於使用VS而不使用它的有趣討論 - 無論慣例如何。 – Exupery

相關問題