2015-03-02 94 views
0

我目前正在探索鏽病和我通過以下問題難住了:如何將標記添加到具體類型?

比方說,我想「註解」的功能與MarkerTrait參數(即製造特徵的註釋的):

use std::marker::MarkerTrait; 

pub trait X: MarkerTrait { } 

pub trait MyInterface { 
    fn foo(&self, bar: u32+ X) -> u32; 
} 

// make this compile in the playpen 
fn main() { } 
消息:

編譯器以現在將用下面的拒絕這個

<anon>:6:25: 6:28 error: expected a reference to a trait [E0172] 
<anon>:6  fn foo(&self, bar : u32 + X) -> u32; 
           ^~~ 

這是一個錯誤或故意的嗎?如果這是故意的,我應該使用什麼解決方法將所需的信息添加到我的代碼中?是否有其他方法來註釋函數參數,例如棉絨可以撿起來嗎?

編輯:好的,它似乎我問錯了問題。在Java中,函數參數可以註釋。我如何在Rust中做類似的事情?

+3

具體類型加上一個界限並沒有什麼意義。該類型將支持特質(在這種情況下,您可以接受特質),或者不會。在同一個編譯過程中,你不能讓一個類型實現一個特性而不是。也許你可以更多地解釋你想做什麼?你在哪裏關心你有'u32'? – Shepmaster 2015-03-02 15:08:40

+1

你的意思是什麼「註釋函數參數」?你可以註釋多於參數的類型? – Levans 2015-03-02 17:17:41

回答

1

鏽確實有註釋,它們可以像struct S或fn S或mod s內應用到項目:

#[test] 
fn what() {} 

但是,如果您使用自己:

#[my_attr] 
fn what() {} 

你得到的錯誤:

error: The attribute `my_attr` is currently unknown to the the compiler and may have meaning added to it in the future 
help: add #![feature(custom_attribute)] to the crate attributes to enable 

您也無法添加nnotations了一個說法:

fn what(#[my_attr] a: u8) {} 

有錯誤

error: unexpected token: `#` 

之所以這麼說,我同意Levans' sentiment - 利用方式對信息進行編碼。

我在Java中最常見的參數註釋是@Nullable。在Rust中,這有標準庫支持,不依賴於外部元數據。您可以使用一個特殊類型來指示值可以是不存在的 - Option

fn what(a: Option<u8>) {} 

您也可以建立自己的類型來表示語義。也許你有一個處理距離的應用程序?創建一個類型代表:

struct Meters(i32); 
相關問題