d应仅可映射引用

原文

void main()
{
    struct One
    {
        int entry = 1;
        @disable this(this);
    }
    One[] ones = [One(), One()];

    import std.algorithm.iteration: map;
    import std.algorithm.comparison: equal;
    assert(ones.map!`a.entry + 1`.equal([2, 2]));
}

不工作.
isInputRange!(One[])为假.
问题不是λ的参数,而是它的返回值.
本质上,当按ref返回r.front时,希望λref返回,这样它就不会创建不必要的副本.对普通函数,方法是使用auto ref,但λ语法不支持此(问题21243),因此必须先解决该问题,或找到解决方法.可用串插件:

private enum getFrontLambda = q{(return ref R r) => r.front};

enum bool isInputRange(R) =
/* ... */
&& (
    is(typeof(mixin("ref ", getFrontLambda)))
    || is(typeof(mixin(getFrontLambda)))
)
/* ... */

用户代码中,复制了推导ref的逻辑:试用ref编译,如果失败则回退到非ref.
21243问题

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