tuples - 如何简单地分配多个返回值?

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

传统上,这是通过 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 - 如何简单地分配多个返回值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33358247/

相关文章:

arrays - 与 Swift `zip` 相反——将元组拆分为两个数组

c++ - 未实现的拷贝构造函数的拷贝赋值

python - 如何在 Python 中为实例分配属性?

d - 为什么 patch.d 需要管理员权限?

ipv6 - D-如何验证IP地址是否有效

python - 类型错误 : <lambda>() missing 1 required positional argument: 'w'

python - python 中的 XOR 交换算法?

python - 将列表与列表列表进行比较,并从列表列表中返回另一个元素

javascript - JS : Assignment within if statment doesn't work

arrays - 使用 D 中任意数量的元素初始化数组