【问题标题】:How to assign simply multiple return values?如何简单地分配多个返回值?
【发布时间】:2016-01-26 06:57:48
【问题描述】:

传统上这是使用out 参数完成的,例如:

void notfun(ushort p, out ubyte r0, out ubyte r1)
{
    r0 = cast(ubyte)((p >> 8) & 0xFF);
    r1 = cast(ubyte)(p & 0xFF); 
}

使用元组可以将其重写为

auto fun(ushort p)
{
    import std.typecons;
    return tuple
    (
        cast(ubyte)((p >> 8) & 0xFF) ,
        cast(ubyte)(p & 0xFF)
    );
}

不幸的是,结果不能直接分配给变量元组:

void main(string[] args)
{
    ushort p = 0x0102;
    ubyte a,b;
    // ugly brute cast!
    *(cast(ReturnType!(typeof(fun))*) &a) = fun(0x0102) ;
}

是否有特殊的语法允许类似

(a,b) = fun(0x0102);

或任何其他惯用的方式来做类似的事情?

【问题讨论】:

    标签: tuples variable-assignment d multiple-return-values


    【解决方案1】:

    【讨论】:

    • 它看起来很棒,但是可以使用std.meta 而不是您自己的实用程序来重写它吗?
    • 看起来您唯一需要做的就是将 RangeTuple 替换为 std.typecons.staticIota
    • 谢谢,这应该在火卫一中。
    • 是的,RangeTuple 早于 staticIota
    • @Cyber​​Shadow:当我说它应该在火卫一中时,我是认真的。这是一个很好的模板。将opAssignauto ref 一起用于特定目的真是太聪明了……点赞。
    猜你喜欢
    • 2012-02-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-19
    • 2014-02-03
    • 1970-01-01
    • 2014-09-22
    相关资源
    最近更新 更多