2015-10-16 100 views
2

在我YAML文件我有:爲什麼YAML將'0777'解釋爲511?

foo: 
    - '0777' 

當我加載在我的代碼(result = YAML.load_file(...))的文件,我得到

result[:foo] = [511] 

這發生在Ubuntu。在Mac上,它是正確的(["0777"])。當改爲:

foo: 
    - "'0777'" 

它適用於Ubuntu的,但該字符串包含引號:'0777'

爲什麼?

+0

的[爲什麼YAML.load返回錯誤的數值?(可能的複製http://stackoverflow.com/questions/5229919/why-is-yaml-load-returning-the-wrong -numeric-value) – Wolfwyrd

+0

你的Ruby腳本除了加載YAML文件之外還有其他的事情嗎?你如何輸出結果? –

+0

@Wolfwyrd:不,在這個問題中,YAML文檔中有一個整數。在這裏,它顯然是一個以某種方式被解碼爲整數的字符串。這與YAML的語義沒有任何關係,這只是YAML解碼器中的一個錯誤。 –

回答

2

在Ruby中的Integer如果參數字符串,碰巧開始0x0b0,它分別解釋爲十六進制,二進制,八進制字符串。

因此這裏0777被視爲一個八進制字符串。由於'0777' octal = '511' decimal,因此得到511

reference

+1

但是'0777'不是一個字符串,而不是一個整數? – pmichna

+1

然後,我應該如何將它放在.yml文件中以使它成爲一個字符串? ''''0777'''不是一個好主意,因爲那時我得到了字符串中的引號(''0777''),這是我不想要的(我想'0777')。 – pmichna

+0

根據我的理解,它應該被視爲字符串,如果你把它放在單引號''''中,如你的例子。只有沒有''''我才能重現這個問題。但是,如果情況並非如此,您可以嘗試使用雙引號'「0777」'。 PS:說實話我在這裏瘋狂猜測,因爲我不能再現這個問題。 – shivam

相關問題