首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >同时实现多个新类型的特性

同时实现多个新类型的特性
EN

Stack Overflow用户
提问于 2014-10-12 17:12:15
回答 1查看 134关注 0票数 2

我有一堆新类型,基本上只是包装String对象:

代码语言:javascript
复制
#[deriving(Show)]
struct IS(pub String);
#[deriving(Show)]
struct HD(pub String);
#[deriving(Show)]
struct EI(pub String);
#[deriving(Show)]
struct RP(pub String);
#[deriving(Show)]
struct PL(pub String);

现在,#[deriving(Show)]为输出生成以下内容:EI(MyStringHere),我只想输出MyStringHere。实现Show显式工作,但是有什么方法可以同时为所有这些新类型实现它吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-10-12 17:50:17

在语言本身中没有这样的方法,但是您可以很容易地使用宏:

代码语言:javascript
复制
#![feature(macro_rules)]

struct IS(pub String);
struct HD(pub String);
struct EI(pub String);
struct RP(pub String);
struct PL(pub String);

macro_rules! newtype_show(
    ($($t:ty),+) => ($(
        impl ::std::fmt::Show for $t {
            fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
                write!(f, "{}", self.0[])
            }
        }
    )+)
)

newtype_show!(IS, HD, EI, RP, PL)

fn main() {
    let hd = HD("abcd".to_string());
    println!("{}", hd);
}

(试试吧,这里)

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26327778

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档