在我YAML文件我有:爲什麼YAML將'0777'解釋爲511?
foo:
- '0777'
當我加載在我的代碼(result = YAML.load_file(...)
)的文件,我得到
result[:foo] = [511]
這發生在Ubuntu。在Mac上,它是正確的(["0777"]
)。當改爲:
foo:
- "'0777'"
它適用於Ubuntu的,但該字符串包含引號:'0777'
。
爲什麼?
在我YAML文件我有:爲什麼YAML將'0777'解釋爲511?
foo:
- '0777'
當我加載在我的代碼(result = YAML.load_file(...)
)的文件,我得到
result[:foo] = [511]
這發生在Ubuntu。在Mac上,它是正確的(["0777"]
)。當改爲:
foo:
- "'0777'"
它適用於Ubuntu的,但該字符串包含引號:'0777'
。
爲什麼?
在Ruby中的Integer
如果參數字符串,碰巧開始0x
,0b
,0
,它分別解釋爲十六進制,二進制,八進制字符串。
因此這裏0777
被視爲一個八進制字符串。由於'0777' octal = '511' decimal
,因此得到511
。
的[爲什麼YAML.load返回錯誤的數值?(可能的複製http://stackoverflow.com/questions/5229919/why-is-yaml-load-returning-the-wrong -numeric-value) – Wolfwyrd
你的Ruby腳本除了加載YAML文件之外還有其他的事情嗎?你如何輸出結果? –
@Wolfwyrd:不,在這個問題中,YAML文檔中有一個整數。在這裏,它顯然是一個以某種方式被解碼爲整數的字符串。這與YAML的語義沒有任何關係,這只是YAML解碼器中的一個錯誤。 –