d答复引用等问题
原文
:让ref
成为TypeCtor
,不是更简单地解决问题吗?
技术上,答案
是肯定的,但现实
是,答案不仅是否定
的,而是:绝对不行.
:虽然使用()
是消除两个不同结构歧义
的自然方法,但似乎导致
问题的唯一情况是,无法在函数
类型中表达"按引用返回"
.
这是开场白.我研究了可表达
的各种方式.我确信我曾经写过一篇论坛
帖子,询问要提出
语法的意见,但现在我再也找不到它了(这让我怀疑记忆力
).
一天,我随机想到,使D的类型
语法成为式
语法可能会自然
地解决该问题,最后,表明它确实如此.
:使用ref
作为TypeCtor
:
//返回按引用返回`整`的`函数指针`的函数
ref(int) function(int) makesFPbyRef();
//按引用返回`整`的作为参数类型的`函数指针`
void takesFP(ref(int) function() funcPtr)
//按引用返回`整`的作为引用参数类型的`函数指针`
void takesFP(ref ref(int) function() funcPtr)
//普通变量类型,可以是`NOOP`或语义错误
struct S { ref(int) member; }
:话虽如此,我知道你的建议
不仅与ref
问题有关,而且是为了使Type
语法更好.
它以ref
为主要动机.
首先,使ref
成为TypeCtor
和使其成为类型构造器
是有区别的.第一个是仅语法/句法
,另一个是语言语义
结构.我假设你即两者兼而有之;
将其列为TypeCtor
而不实际跟进语义
肯定是可能的,但非常令人困惑.
我提议的语法更改
仅是添加
.建议的弃用
完全是可选
的,不是使语法
工作所必需的.另外,我建议更改语法
,而不更改语义
.
看看
struct S { ref(int) member; }
你似乎真建议ref
是个成熟的类型构造器
:与C++
一样,他们也有个引用类型
构造器,但本质上C++
语言和库构造
并不与引用工作:引用
指针和(逻辑结果
)引用数组
不是类型
.D不需要非组合
类型系统.
我想了很久.ref(Type)
作为语法
结构,没前途.
void takesFP(ref ref(int) function() funcPtr)
类似如下编写的成员函数
:
const const(int) f() { ... }
这不好.
:然后,可以为内置元组
保留括号.特别是很难正确表达
单个类型组成的类型元组
.
这根本不是问题.对元组
语法的括号,必须按(value,)
表示1元元组
,因为(value)
是个普通式
,因此要求尾随
逗号也与类型
保持一致:(int)
是int
,但(int,)
是有int
组件的1元元组
.
郑重声明:我从一开始就反对元组
用括号.括号
来分组
,而不是来构造
.我对元组方面的看法是,静态数组看作
同构元组(迭代类型
相同)的特例,并按异构
组件扩展:int[2]
是[int,int]
的简写;
而[int,string]
是异构元组
.与构建数组
一样,这样构建一个元组:[1,"abc"]
.
由内省设计
支持使用运行时
索引:
[int, immutable int]
可访问ref const(int)
,[int,long]
可按值访问长
,但无ref
.