gpt4 book ai didi

d - 断言失败时如何打印更多?

转载 作者:行者123 更新时间:2023-12-04 11:53:00 25 4
gpt4 key购买 nike

Real opIndex(size_t row, size_t col = 0) const pure nothrow {
assert(col + row * Col < Row * Col, "index out of bounds.");
return _data[col + row * Col];
}

今天这个断言失败了,我想看看 row 的实际值和 col .不幸的是, assert不像 writelnwritefln ,所以我不能做类似的事情:
assert(col + row * Col < Row * Col, "index out of bounds. row: %d  col: %d", row, col);

我什至试过这个:
assert(col + row * Col < Row * Col, "index out of bounds" ~ to!string(row)~ " " ~ to!string(col));

但是我打不通 to因为 opIndex是纯的。我可以暂时删除 pure来自 opIndex ,但这会触发一长串撤消操作,因为其他纯方法正在调用 opIndex .无法调用 to也消除了创建我自己的函数以传递给 assert 的可能性.

那么,还有什么可以尝试的呢?我只想在断言失败时打印这些值。

最佳答案

目前,如果您想在 pure 中转换字符串或从字符串转换。函数,你将不得不自己编写转换函数。一些工作已经投入到制作 std.conv.to 等功能上。 pure ,但我们还没有达到他们所处的地步。太多的低级结构仍然不是pure ,即使理论上可以。制作东西const 正在投入大量工作- 更正下一个版本的 dmd (2.059),以及在 pure 上的一些工作与此密切相关,因为 Object 中的某些功能必须是pure , const , @safe , 和 nothrow .所以,很有可能std.conv.to将能够是pure用于在下一个版本中转换字符串。即使它不会在下一个版本中发生,它也会很快发生,因为它确实需要发生(正如你的困境所说明的那样)。但在那之前,你只能靠自己了。

假设所有这些都已解决,那么为您的断言创建字符串的最佳方法是

assert(col + row * col < row * col,
format("index out of bounds. row: %d col: %d", row, col));

这将在不纯函数中工作,但直到 format可以是 pure ,它在 pure 中不起作用一。

现在,您可以将不纯的东西放入 debug堵塞。所以,如果你想,你可以做
debug
{
assert(col + row * col < row * col,
format("index out of bounds. row: %d col: %d", row, col));
}

但是你必须用 -debug 编译否则您的断言将不会运行。但无论如何, debug将允许您将不纯代码放入您的 pure用于调试目的的函数,只要 -debug标志被使用,因此它可以作为 format 当前缺陷的临时解决方法和 to .

关于d - 断言失败时如何打印更多?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9459733/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com