d多uda解析参数

struct Options {
    @Alt("n") // `-n`来替代`--name`
    @Help("名的帮助")
    string name;
}

用独立正交uda,使更可读.

	struct T {
		@(NamedArgument
			.PreValidation!((string s) { return s.length > 1 && s[0] == '!'; })
			.Parse        !((string s) { return s[1]; })
			.Validation   !((char v) { return v >= '0' && v <= '9'; })
			.Action !((ref int a, char v) { a = v - '0'; })
		)
		int a;
	}

可改写为多个uda:


	struct T {
		@NamedArgument
		@PreValidation!((string s) { return s.length > 1 && s[0] == '!'; })
		@Parse        !((string s) { return s[1]; })
		@Validation   !((char v) { return v >= '0' && v <= '9'; })
		@Action!((ref int a, char v) { a = v - '0'; })
		int a;
	}

也使实现用多个更小类来完成.函数字面可更简洁:

	.PreValidation!((string s) { return s.length > 1 && s[0] == '!'; })
//可写为:
	.PreValidation!(s => s.length > 1 && s[0] == '!')
posted @   zjh6  阅读(11)  评论(0编辑  收藏  举报  
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示