知识若不分享 实在没有意义 http://www.d-programming-language-china.org 20070427
点击下面网址查看原文:
http://www.d-programming-language-china.org
by: oldrev
from: http://oldrev.javaeye.com/blog/60422
关键字: D DLang D语言 Tuple
D的文档里说 struct/class 的 .tupleof 属性可以把一个 struct 的所有成员变量转换为一个 tuple。那么反过来让 tuple 作为 struct 的成员可不可以呢?答案是可以,因为 tuple相当一个可以存放不同元素类型的静态数组,我们只要在 struct 中声明一个 Tuple 实例就能达到目的:
D 代码
struct Foo(Tuple...)
{
Tuple fields;
}
alias Foo!(int, long, char) Foobar;
Foobar bar;
这样就相当于手写:
D 代码
struct Foobar
{
int field0;
long field1;
char field2;
}
当访问 bar 中的元素时,只需:( 本文出处: http://www.d-programming-language-china.org )
D 代码
bar.fields[0] = 1; // Tuple 第一个元素是 int 类型
bar.fields[2] = 'A';
...
值得注意的是由于 Tuple 是一个整体,因此在 union 中声明 Tuple 实例是不能起到 “union” 的效果的。
oldrev 2007-03-22 13:54
既然现在函数的形参表都能与tuple相互转化,那估计D2.0能把符合 (x, y, y, ....) 形式的表达式都定义为 tuple,就能实现:
代码
alias (int, long, char) Tp; //定义一个 tuple: Tp
int x, y;
(x, y) = (y, x); // 交换 x, y 的值
void foo(int x, long y){ ... };
(int, long) args = [1, 2];
foo(args); // 调用 foo(1, 2)
//函数返回多个值
(int, char[]) bar() {
(int, char[]) ret = [1, "foobar"];
return ret;
}
( lastupdate:20070427 最新文章请访问http://www.d-programming-language-china.org )关于一大步成功社区:
yidabu提倡在交流中学习,在分享中提高
收集感兴趣的知识,写下心得,通过网络与别人一起分享
理解一点就实践一步,收获什么就分享什么,成功就是这样一点点一步步累积起来的
网络只是一个工具,只有自己身心提高才是实实在在的。d-programming-language-china.org为大家提供一个学习交流各种知识的平台