2014-07-15 4 views
11

Pas kütüphanemden diğer pas projelerine uygun makrolar yapmak için uğraşıyorum.Başka bir sandıktan makro nasıl kullanılır?

İşte bu çalışmayı şu anda nasıl yapmaya çalıştığımın bir örneği.

lib.rs:

#![crate_name = "dsp"] 
#![feature(macro_rules, phase)] 
#![phase(syntax)] 

pub mod macros; 

macros.rs:

#![macro_escape] 

#[macro_export] 
macro_rules! macro(...) 

other_project.rs:

#![feature(phase, macro_rules)] 
#![phase(syntax, plugin, link)] extern crate dsp; 

macro!(...) // error: macro undefined: 'macro!' 

Doğru yolda mıyım? Std :: macros'u referans olarak kullanmaya çalışıyorum ama çok şansım yok gibi gözüküyorum. Eksik olduğum belli bir şey var mı?

+0

Dijital sinyal işleme endüstrisine mi bakıyorsunuz yoksa DSP burada başka bir şey için mi duruyor? – errordeveloper

+0

@errordeveloper Yep! Özellikle ses için. Hala çok erken aşamalar ve oldukça çıplak kemikler var, ama bir geriçağırım (portaudio kullanarak) ve bir 'DSP' düğüm çerçevesinin temeli hazırım. Piston projesinin bir parçası olarak (https://github.com/PistonDevelopers/rust-dsp) buradan ulaşabilirsiniz. Şu anda bunu generatif bir müzik motorunda kullanıyorum - çok yakında yaptığım osilatör/synth çalışmasının bazılarına katkıda bulunmayı umuyorum. Ayrıca, biz her zaman katkıları/yardım :-) için açıkyız – mindTree

+0

Sesler harika! Ben kontrol edeceğim :) Bana @ gmail.com bir mesaj bırakmak için çekinmeyin. NEON ve VFP'den Rust ile nasıl faydalanabileceğimi merak ettim ... – errordeveloper

cevap

7

Öznitelikleriniz karışık. #[…]sonraki madde anlamına gelir iken

#![…], dış kapsamı belirtir. #![feature(phase)] gereksizdir, lib.rs yılında

  1. ve #![phase(syntax)] anlamsızdır: Burada

    bazı Not şeylerdir. other_project.rs yılında

  2. , sizin phase nitelik sandık uygulanır, değil extern crate dsp; öğe bu ondan herhangi bir makro yüklemez nedeni budur. !'u kaldırın.

+1

Sadece bunu anlamak için çok zaman harcadım ve aynı problemle buraya gelebilirsiniz: her iki ek notu da 'main.rs' veya, sandık tanımladığınızda, 'lib.rs' içinde, * aslında * içinde makroları kullanmak istediğiniz dosyada * değil. – skalee

+2

Etkiye sahip olmak için, # # [özellik]' olmalıdır. sandık, yani sandık kök dosya, hangi varsayılan olarak 'lib.rs' veya' main.rs' için uygun, anlamına gelir. –