2 个版本

使用旧的 Rust 2015

0.1.1 2016年5月24日
0.1.0 2016年5月24日

#730 in 编程语言

MIT/Apache

5KB
63

overload-strings

这是一个快速而愚蠢的语法扩展,主要是为了熟悉使用自定义属性来使用编译器插件。它执行Haskell的OverloadedStrings的等效操作,即在每个字符串字面量上插入一个.into()调用。无需额外特质。

用法

作为编译器插件,需要nightly Rust。添加

#![feature(plugin)]
#![plugin(overload_strings)]

然后在你想要重载字符串字面量的项(模块、fn、impl等)上应用#[overload_strings]属性。

该注解不会自动递归到子模块中,以降低由于非局部效应而引起意外的风险。它还忽略了staticconst,因为它们不能包含方法调用。

当歧义导致类型推断错误时,您可以使用type_ascription nightly功能来消除歧义。

现在您可以调用期望StringCow<str>和其他实现From<&str>的所有类型的函数,并使用字符串字面量调用它们

struct Person {
    first: String,
    last: String,
    birthplace: Cow<str>,
}

process_persons(&[
    Person { first: "Doug", last: "Piranha", birthplace: "London" },
    Person { first: "Dinsdale", last: "Piranha", birthplace: "London" },
]);

无运行时依赖