d的@属性状态
它甚至进度不到1/10
.
它几乎什么
都不做.唯一可辨别的区分是typeof
:
struct S
{
int prop1() { return 1; }
@property int prop2() { return 2; }
}
pragma(msg, typeof(S.prop1)); // int()
pragma(msg, typeof(S.prop2)); // int
有一段时间,我们有一个-property
可以强制执行某些规则的开关,但它也被删除了.
从今天开始,我会忽略@property
.如果有人在使用它,就假装它是一个正常的功能.
我会继续无视.反正我们有inout
功能,功能都是一样的
我个人把它用于文档
,因为它清楚地表明了所述函数
的意图.
为什么不推荐?
当您需要发展API
并把用户从A
迁移到B
数据成员时,它很有用,例如:
struct S
{
@property string old_member() const { return new_member; }
string new_member;
}
//或当你想审计时
struct S
{
@property string member() const
{
writeln("'member' is used by ", environment["USER"]);
return _member;
}
string _member;
}
我不反对弃用@property
属性,但我相信D必须支持obj.mem
表达式调用obj.mem()
函数时的用例
(这通常称为属性
函数)
没有@property
,上面也可用,且在D1
时代就实现了.
这样,就可以了:
import std;
void main()
{
S s;
s.new_member = "foo";
s.old_member.writeln;
}
struct S
{
string old_member() { return new_member; }
string new_member;
}
@property
的一个好处
是它允许编译器
自动推导.所以它表现得像动
但更优越!例如:
import std.stdio;
struct ReverseS(int size)
{
private char[size] bytes;
private int index = size - 1;
@property empty() {
return index < 0;
}
@property front() {
return bytes[index];
}
@property popFront() {
--index;
}
}
void main()
{
char[9] text = "ytreporp@".dup;
foreach(c; ReverseS!9(text)) {
c.write;
}
writeln; // @property
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现