d该别名有啥问题
auto s = 1234.to!string.map!q{a - '0'}.sum;
正常.但
alias comb = to!string.map!q{a - '0'}
报错.
import std;
alias comb = map!q{a - '0'};
void main()
{
auto s = 2234.to!string.map!q{a - '0'}.sum;
s.to!string.comb.sum.writeln;
// 工作: "2"
}
简单说明:
到!串(to!string)
是期望1个参数
的函数,但在别名中,你没有提供该参数
.请把别名
转换为λ
式:
alias comb = x => x.to!string.map!q{a - '0'}
复杂解释:
到(to)
是如下定义
的模板:
// https://github.com/dlang/phobos/blob/master/std/conv.d
template to(T)
{
T to(A...)(A args)if (A.length > 0)
{
return toImpl!T(args);
}
// 为简洁,省略了一些重载
}
到
至少需要2个
模板参数,第一个
参数是(用到!串
)显式
传递的外部模板
,其他是从传递
给到(to)
函数中推导
的.因为没有传递
参数给到!串
,则不会实例化
内部模板.
基本上,你在试按参数
把未实例化的模板
传递给映射(map)
.这是非常奇特
情况,所以可能没有专门
错误消息,或遇见了编译器中的八哥
.
一个合理方法,由于目标是操作数字
,因此可直接转换为char
类型:
import std.algorithm : map, sum;
import std.conv : toChars;
alias comb = (uint x) => x.toChars.map!"a - '0'";
void main()
{
auto s = 2234.comb.sum;
assert(s.comb.sum == 2);
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现