2

serde リポジトリから例を実行しようとすると、次のようになります。

#![feature(proc_macro)]

#[macro_use]
extern crate serde_derive;

extern crate serde_json;

#[derive(Serialize, Deserialize, Debug)]
struct Point {
    x: i32,
    y: i32,
}

fn main() {
    let point = Point { x: 1, y: 2 };

    // Convert the Point to a JSON string.
    let serialized = serde_json::to_string(&point).unwrap();

    // Prints serialized = {"x":1,"y":2}
    println!("serialized = {}", serialized);

    // Convert the JSON string back to a Point.
    let deserialized: Point = serde_json::from_str(&serialized).unwrap();

    // Prints deserialized = Point { x: 1, y: 2 }
    println!("deserialized = {:?}", deserialized);
}

エラーが発生します:

エラー:rustcターゲット固有の情報について学習するための実行に失敗しました

原因: プロセスが正常に終了しませんでした: rustc - --crate-name _ --print=file-names --crate-type bin --crate-type proc-macro --crate-type rlib --target x86_64-unknown-linux-gnu(終了コード: 101) --- stderr エラー: 未知のクレート タイプ:proc-macro

私の Rust バージョンは 1.13.0 で、Cargo.toml には次の依存関係があります。

[dependencies]
serde = "*"
serde_derive = "*"

他の依存関係や追加の構成を使用する必要がありますか?

4

1 に答える 1

0

この#![feature(...)]属性は、まだ安定化されていない Rust 機能を使用するコードを示します。質問がされた時点では、proc_macro機能はまだ安定していませんでした。Serde は、その#[derive(Serialize, Deserialize)]マクロのためにこの機能を必要とします。

カスタム派生はRust 1.15の時点で安定化されているため、問題のコード (feature 属性を削除したもの) は、そのバージョン以降のすべての Rust コンパイラで動作するはずです。

于 2018-02-25T20:50:05.480 に答える