标签: phobos

相当于D中的remove_if

最近我对D编程语言感兴趣.我刚刚开始学习它,并且来自C++背景.我想知道是否有相当于std :: remove_if.我只看到删除浏览dlang网站上的文档.
如果没有直接的等价物,那么在D中获得相同结果的正确或最恰当的方法是什么?
编辑:我应该补充一点,我在擦除 - 删除的上下文中思考

c++ algorithm idioms d phobos

8
推荐指数
1
解决办法
184
查看次数

如果使用C库,D是否向后兼容C?

如果我导入std.c库而不是在C中包含库,C代码是否会使用D编译器进行编译,还是存在其他后缀兼容性问题?

c d backwards-compatibility phobos

7
推荐指数
1
解决办法
500
查看次数

你如何在D中使用范围?

每当我尝试在D中使用范围时,我都会悲惨地失败.

在D中使用范围的正确方法是什么?(请参阅内联评论以了解我的困惑.)

void print(R)(/* ref? auto ref? neither? */ R r)
{
    foreach (x; r)
    {
        writeln(x);
    }

    // Million $$$ question:
    //
    // Will I get back the same things as last time?
    // Do I have to check for this every time?

    foreach (x; r)
    {
        writeln(x);
    }
}

void test2(alias F, R)(/* ref/auto ref? */ R items)
{
    // Will it consume items?
    // _Should_ it consume items?
    // Will the caller be affected? How do I …
Run Code Online (Sandbox Code Playgroud)

d range phobos

7
推荐指数
2
解决办法
305
查看次数

std.algorithm.joiner(string [],string) - 为什么结果元素是dchar而不是char?

我尝试编译以下代码:

import std.algorithm;
void main()
{
    string[] x = ["ab", "cd", "ef"]; // 'string' is same as 'immutable(char)[]'
    string space = " ";
    char z = joiner( x, space ).front(); // error
}
Run Code Online (Sandbox Code Playgroud)

dmd带有错误的结尾编译:

 test.d(8): Error: cannot implicitly convert expression (joiner(x,space).front()) of type dchar to char
Run Code Online (Sandbox Code Playgroud)

更改char zdchar z确定错误消息,但我很感兴趣,为什么它出现在第一位.

为什么结果joiner(string[],string).front()是dchar而不是char?

(文档http://dlang.org/phobos/std_algorithm.html#joiner中没有任何内容)

d phobos dmd

7
推荐指数
1
解决办法
389
查看次数

在writefln()外部连接D串的最短方法?

我重申需要连接格式字符串,并且想知道在D中写入flfln()函数之外连接字符串的最短(或最容易阅读)的方法是什么?

也就是说,我喜欢writefln的行为,例如你可以做的事情:

// Some code to init y="2013", m="01", d="02" ...
writefln("%s-%s-%s", y, m, d);
Run Code Online (Sandbox Code Playgroud)

...但我想这样做而不在stdout上写出来.有同样简单的方法吗?

我发现的唯一想法是std.string中的format函数,但是这需要你提供预定义长度的字符串缓冲区作为第一个参数,这在大多数时候都很不方便.

我发现的另一个选择是(通过在std.array中使用"join"):

// Some code to init y="2013", m="01", d="02" ...
datestr = [y, m, d].join("-");
Run Code Online (Sandbox Code Playgroud)

...这非常方便,但只有当你使用相同的"分隔符"时才有效.

更常见的方法是,这比上面的示例短,并且不需要提供预定义长度的缓冲区字符串?

d phobos

7
推荐指数
1
解决办法
3522
查看次数

D/Phobos风格指南

我刚刚开始查看phobos源代码,它充斥着几种不同的样式并注释掉了代码.

网络方面的风格指南非常小,我只发现2006年的断链和2004年的另一个...

是否有更新,更全面的指南?

PS:本来要求在D.learn新闻组,但我没有得到任何答案,我想我可能会尝试在这里,即使它可能是一个在黑暗中拍摄

coding-style d phobos

6
推荐指数
1
解决办法
729
查看次数

D中基于堆栈的对象实例化

我正在学习D,并且因为我得到的错误而感到困惑.

考虑以下:

module helloworld;

import std.stdio;
import std.perf;

ptrdiff_t main( string[] args )
{
     auto t = new PerformanceCounter;    //From managed heap
     //PerformanceCounter t;             //On the stack

     t.start();
     writeln( "Hello, ", size_t.sizeof * 8, "-bit world!" );
     t.stop();

     writeln( "Elapsed time: ", t.microseconds, " \xb5s." );

     return 0;
} //main()
Run Code Online (Sandbox Code Playgroud)

产量非常可观:

Hello, 32-bit world!
Elapsed time: 218 µs.
Run Code Online (Sandbox Code Playgroud)

现在考虑当我尝试在堆栈上初始化PerformanceCounter而不是使用托管堆时会发生什么:

 //auto t = new PerformanceCounter;  //From managed heap
 PerformanceCounter t;               //On the stack
Run Code Online (Sandbox Code Playgroud)

产量:

--- killed by signal 10
Run Code Online (Sandbox Code Playgroud)

我很难过.有什么想法为什么这打破?(Mac OS …

stack d allocation raii phobos

6
推荐指数
1
解决办法
625
查看次数

D中的简单集实现?

我正在D标准库中寻找Set实现,我只发现了这些:

  • 二叉堆
  • RedBlackTree

如果我只能弄清楚如何使用它们,这两种方法都可以正常工作.我从RedBlackTree开始(因为我已经熟悉它们是如何工作的),这就是我想出的:

auto rbt = redBlackTree!string();
foreach(s; setOfStrings) {
    rbt.insert(s);
}

foreach(s; rbt) {
    if (s[0 .. 3] == "sth") {
        rbt.removeKey(s);
    }
}
Run Code Online (Sandbox Code Playgroud)

我知道我可以在第一个foreach中完成这个条件,但这只是一个示例,表明我需要添加和删除Set中的元素.这会工作,但我得到编译错误:

错误:模板std.container.RedBlackTree(串).RedBlackTree.removeKey(U)如果(!isImplicitlyConvertible(U,ELEM))不匹配任何函数模板声明

错误:!模板std.container.RedBlackTree(串).RedBlackTree.removeKey(U)如果(!isImplicitlyConvertible(U,ELEM))不能从参数类型推断模板函数()(字符串

我不需要红黑树(任何没有重复的东西),速度不是太重要.我可以这样做:

string[] arr;
foreach(s; setOfStrings) {
    // check for duplicate code here...

    arr ~= s;
}
for(int i = 0; i < arr.length; i++) {
    if (s[0 .. 3] == "sth") {
        arr = arr[0 .. i] ~ arr[i + 1 .. $];
        i++;
    }
}
Run Code Online (Sandbox Code Playgroud)

标准库中是否有任何简单的Set?

containers d set phobos

6
推荐指数
1
解决办法
291
查看次数

我可以在功能上连接数字和字符串吗?

我试图创建一个在字符串中嵌入数字的纯函数.明显的连接方法不起作用:

pure string foo(immutable int bar)
{
    return "Number: " ~ bar; // Error: strings and ints are incompatible.
    return "Number: " ~ to!string(bar); // Error: to() is impure.
}
Run Code Online (Sandbox Code Playgroud)

是否有一种干净,实用的方式来连接数字和字符串?我想避免编写自己的连接或转换函数,但如果必须,我会.

functional-programming casting d concatenation phobos

6
推荐指数
1
解决办法
215
查看次数

来自文件的字节InputRange

如何从文件中轻松构造原始的逐字节InputRange/ForwardRange/RandomAccessRange?

file-io d phobos

6
推荐指数
2
解决办法
245
查看次数