Rust代码示例——17.3.特定域语言(Domain Specific Languages—DSLs)

特定域语言是嵌入在Rust宏中最小的语言。因为Rust宏系统将其扩展到正常的Rust结构中,所以它是完全可用的,但是它看上去就像一个小语言。这就允许你为某个特定的函数(使用约束)定义某种简洁而直观的语法。

假如我想定义一个小计算器的API。并且提供一个表达式,输出到控制台窗口。

macro_rules! calculate {

    (eval $e:expr) => {

        {

            let val: usize = $e; // Force types to be unsigned integers

            println!("{} = {}", stringify!{$e}, val);

        }

    };

}


fn main() {

    calculate! {

        eval 1 + 2 // hehehe `eval` is _not_ a Rust keyword!

    }


    calculate! {

        eval (1 + 2) * (3 / 4)

    }

}

输出结果:

1 + 2 = 3

(1 + 2) * (3 / 4) = 0

这是一个非常简单的示例,更复杂的接口还在开发中,例如:lazy_static或clap。

注意,宏内有两个大括号,外面的是macro_rules!的语法的一部分,小括号和方括号不包含在内。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值