sym-linkingファイル用のマクロを書きました。最初はちょうど最初のパターンがありましたが、 "&フォーマット"と書かなくてもいいと思っていました!すべての時間。これらのパターンを持つのでマクロルールは最初のパターンにのみ一致します
:
macro_rules! syml {
($a:expr, $b:expr) => {
Command::new("ln").args(&["-s", $a, $b])
};
(($a:expr, $($x:expr),+), ($b:expr, $($y:expr),+)) => {
Command::new("ln").args(&["-s", &format!($a, $($x),+), &format!($b, $($y),+)])
}
}
私はこれらのケースを一致させたい:
syml!("from", "to");
syml!(("{}", from), "to");
syml!("from", ("{}", to));
syml!(("{}", from), ("{}", to));
syml!(("{}{}", from, here), ("{}{}", to, there));
しかし、これまでのところ、すべての時間が唯一の第一のパターンが一致したので、私のようなmismatched types
エラーを取得していますexpected reference, found tuple
。
最後の2つの例の場合でも、最初のパターンと一致しないようにしようとしているのは分かりません。
ないマクロの専門家なので、私はよ(1)タプルは式なので、 "(x、y)"は '$ a:expr'にマッチすることができます(2)パターンは順番に試されると信じています。より具体的なパターンが最初にありますか? –
問題には関係しませんが、標準ライブラリには['symlink'](https://doc.rust-lang.org/stable/std/os/unix/fs/fn.symlink.html)機能があります。 –