原文
我问了个问题,添加模板调用
是否构成"过度"
负担.很明显,这表明正在调整i串
的默认行为.
使用DIP1036
串插值,表明用它调用sql
:
1
.如果在全局
导入了core.interpolation
以外的内容
,它会应用至该模块中i串
的所有用户
,而不仅是调用SQL
函数的用户.
即,用i串s
调用writeln
不会执行
期望操作,且在视觉上查看代码
并不明显,编译器
也无法检查.
2
.或在本地导入core.interpolation
或arsd.sqlite
,以满足每次域使用i串s
.
感谢你的澄清.我确实误解了它.
因此,即db.execi()
是调整调用sql
的模板
.我以为它是sqlapi
的一部分,而不是包装器.
这使得它在这方面与DIP1027
一样.
不必用标记
来说明参数
是字面还是变量
.考虑:
import std.stdio;
void main()
{
writeln("hello".stringof);
string foo = "betty";
writeln(foo.stringof);
}
运行时,打印:
"hello"
foo
因此,用.stringof
,模板可确定元组
元素是串字面还是变量
.
表明,这对DIP1036
来说,也是个问题,因为db.execi()
是模板.我没有发现这一点.
显然,对用户来说,DIP1027
并不比DIP1036
更难.
目前,D
内部支持按元组
对待非平凡式
.DIP1027
依赖于此,如:
int i = 4;
writefln(i"hello $(3 + i)");
打印:
hello 7
但是,如果用以下命令创建元组
:
template tuple(A ...) {
alias tuple = A; }
则就不能传递非平凡式
给它,因为不能按别名参数
对待它.这是D
中的普遍缺点
,而不是DIP1027
的特定问题
.
一直在朝
以下方向发展:
auto tup = (1, 3 + i);
也是因此弃用逗号式
.
有趣的是,可用i串
来创建非平凡的式元组
:
int i = 4;
auto tup2 = i"$i $(3 + i)"[1..3];
writeln("a tuple: ", tup2);
打印:
a tuple: 47
我不推荐
这样,但它只是说明了i串
是个构建块
而不是最终产品
.
至于检测串字面
,我试了一些方案
,但没用
.它可能必须添加
一个__traits
,来放这些东西
.
试使用DIP1036
表明要向元组
添加更多必须过滤
掉的项.
嵌套的i串
会执行期望操作
,在元组
中创建一个会变平的元组
.最终会遇见格式参数太多
编译时错误.
i串
只是简单地转换
为元组
,之后,遵循可预测
的元组规则
.
但是,总是可按参数
插入嵌套的i串
到扩展它为单个参数
,且无元组
问题的text
函数中.
总之,D应朝着更好的元组
支持方向发展.DIP1027``正好
符合这一点,因为它没有神奇
.更好元组
支持,适合扩展i串
功能,而不是使i串
自身更强大
.
int x=readln.strip.split.to!int;
db.execi(xxx!i"INSERT INTO sample VALUES ($(id), $(2*x))");
2*x
不能转为别名
,我要想一下.