2015-03-25 47 views
1

考慮:無法鏈訪問的元組類型

struct NameType([u8;64]); 
name: (NameType, NameType); 

我可以這樣做:

let def = &name.0 OR &name.1 

,但我不能這樣做:

let def = &name.0.0 OR &name.1.0 

訪問內部。我必須做兩次:

let abc = &name.0; 
let def = &abc.0; 

爲什麼我無法鏈接它訪問內部的子元組,tuple-structs等?

rustc 1.0.0-nightly (ecf8c64e1 2015-03-21) (built 2015-03-22) 
+3

您是否嘗試過在括號內括括號? '讓def =(&name.0).0'? – 2015-03-25 08:30:09

+0

@BinkanSalaryman啊是的,它支持括號。但是,這是什麼意思?爲什麼不使用支架鏈接不允許?上面的兩個步驟(工作)應該更自然地組合成沒有括號的單個步驟(隨着類型由越來越多的子類型組成,這將繼續增長)。那麼你能解釋爲什麼這是必要的嗎? – ustulation 2015-03-25 08:35:44

+1

編譯器將「0.0」識別爲十進制數(我在rust-lang.org上測試過) – 2015-03-25 08:38:54

回答

1

正如在評論中提到的,foo.0.0將被解析爲有一個數字。這是originally mentioned in the RFC,具體this

我寧可不改變詞法分析器允許A.0.1。我寧願只是說這是一個錯誤,並讓人們寫出名字。我們可以隨時添加它。

你當然可以提交bug,但作爲一種解決方法,使用括號:

(foo.0).0 

在我看來,你不應該嵌套元組深反正。我強烈建議在你慢慢去瘋狂之前決定是否要foo.0.1.2foo.1.2.0

1

除了上面的答案,我還發現差距會造成奇觀:)所以;

foo.0. 0 OR foo.0 . 0 etc all work 

很好。不知道它意味着多少,但如果有人想要鏈接它,但有一種方法(不使用括號)

+1

爲什麼downvote不留言? – ustulation 2015-03-26 14:11:58