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 @ 2022-03-18 08:43  zjh6  阅读(15)  评论(0)    收藏  举报  来源