D 具有类和结构的名称空间?
如果我有D语言的“嵌套成员”就好了,所以我有了编写代码的不光彩想法D 具有类和结构的名称空间?,d,oop,D,Oop,如果我有D语言的“嵌套成员”就好了,所以我有了编写代码的不光彩想法 class Keyboard { struct Unused { string key1 = "Wake Up"; string key2 = "Sleep"; string key3 = "Power"; } Unused unused; } int main() { Keyboard kb; kb.unused.key1 = "S
class Keyboard
{
struct Unused {
string key1 = "Wake Up";
string key2 = "Sleep";
string key3 = "Power";
}
Unused unused;
}
int main()
{
Keyboard kb;
kb.unused.key1 = "Scroll Lock";
return 0;
}
好吧,这也是一个坏例子。但是我正在学习面向对象编程,不知道这是不是一件好事,或者怎么做。这样做本身没有错,这里的问题是
kb
仍然是null
。您需要创建一个键盘
对象:
Keyboard kb = new Keyboard();
如果不想在键盘上键入两次,可以使用auto
:
auto kb = new Keyboard();
D将自动为您确定正确的类型
将相关对象像这样分组到一个结构中是一种相当常见的做法,尽管通常您需要一个比Unused
更具描述性的名称(否则,为什么要使用名称空间?) 您可以使用您第一次建议的语法。只需将未使用的设置为静态成员。这很好:
class Keyboard
{
struct Unused {
string key1 = "Wake Up";
string key2 = "Sleep";
string key3 = "Power";
}
static Unused unused; // **This is now a static member**
}
int main()
{
Keyboard kb;
kb.unused.key1 = "Scroll Lock";
return 0;
}
真可惜!从自动到键盘运行程序有一些不同,或者编译后是同一件事?完全一样:编译器可以看到new Keyboard()
在编译时返回Keyboard
,只添加类型本身。编译后的代码没有区别。@pslacerda,它被称为类型推断,在D.foreach(w;words)、sort(words)中无处不在;这里的排序也有推论。全称它为排序!(不可变字符)[],“a