我有一个全局D模块,其中包含一些辅助函数(即用于日志记录),它们位于模块级别,不在类中。但是,当从析构函数调用这些函数时,我得到core.exception.OutOfMemoryError和/或应用程序挂起并崩溃。我做错什么了吗
精简测试用例:
记录器.d
module main.logger;
void log(const(char)[] msg) {
auto time = // GET TIME OF DAY SOMEHOW
std.stdio.writeln(std.c
Visual D代码模板如下所示:
module main;
import std.stdio;
int main(string[] argv)
{
writeln("Hello D-World!");
return 0;
}
是否可以将模板更改为:
module main;
import std.stdio;
void main() {
}
您可以在VisualD安装文件夹中更改模板:
C:\Program Files (x86)\VisualD\Templates\
对于使用foreach循环进行迭代并获取文件上的日期,我需要输入char[],而不是string
我编写了下一个代码:
auto files = dirEntries ("E:\\ddd", SpanMode.shallow);
foreach (file; files)
{
char [] s = to!char[](file); //it's crap... and do not work...
writeln(file);
}
我使用下一种方法
它需要作为输入char
我看到D有未来,可以创建线程,但是否有类似“Dart”的未来/承诺(或者如果使用库,我猜是javascript)
我希望能够编写这样的代码-
//
// NOT D code because I can't remember all the syntax!
//
auto fut = myfile.read();
fut.then(function(data) {
// Process data asynchronously when the future completes
};
除了mixin字符串之外,还有没有其他方法可以混合函数名(或者任何类型的成员名)
我现在是这样做的:
mixin template PacketValue(T, string name, PacketMode mode, size_t offset) {
import std.string : format;
static if (mode == PacketMode.both || mode == PacketMode.write) {
enum writeP
我正在用D编写一些代码,并试图确定一种在字符串中搜索字符串并用另一个可能具有不同长度的字符串替换它的通用方法
例如,工作原理如下:
string x = "123XX456XX789";
auto y = search_and_replace(x, "XX", "DIFFERENT");
assert (y == "123DIFFERENT456DIFFERENT789");
很简单,标准库中的replace函数正好可以:
import std.array; // or std.string
这很简单,我很不好意思问,但如何将D2中的c字符串转换为d字符串
我有两个用例
string convert( const(char)* c_str );
string convert( const(char)* c_str, size_t length );
使用std.string.toString(char*)(D1/Phobos)或std.conv.to!(字符串)(D2):
切片指针:
string s = c_str[0..len];
(不能使用“length”,因为它在sli
根据D docs(),受保护的模块成员是非法的,但编译器允许我这样做
模块foo;
受保护的
{
int-bar;
}
这是文档中的错误、编译器错误还是我做错了什么?
实际上,这不是文档和现实之间唯一的不一致之处,那么这个引用()是真实的吗?是否存在更真实的语言描述?
我的配置:DMD2.047,操作系统Windows 7,x86编译器允许在属性没有任何影响的地方使用属性。这是不幸的,因为它令人困惑。希望他们最终会被禁止,就像他们中的一些人已经被禁止一样
在线文档不完整。如果你对学习D很认真,
我正在尝试编写通用代码,可以将任何字符流(dchars)lex到任何地方。。。无论是从一个文件还是从stdin到另一个文件或stdout
我该怎么做
似乎stdin和stdout与InputRange和OutputRange一起使用是痛苦的(因为我每次都必须手动包装它们),而且我不能使用std.stdio.Stream,因为它给我的是字节,而不是字符串。。。我找不到任何适配器可以轻松地从一个转换到另一个
因此,在我的程序中,我找不到一种有效的方法来使用stdin/stdout
是否有类似.NET
是否可以防止D2中变量的非传递性重新分配
例如:
final int[] a = [0];
a[0] = 1; // OK.
a = []; // ERROR.
我在这里只看到const和immutable:
不。您拥有的是常量和不可变的,它们是可传递的(如果不是的话,它们真的不起作用)。你能行
const(int)[] a = [0];
a[0] = 1; // ERROR.
a = []; // OK;
但不是你想要的
当常量和不可变是可传递的时,编译器可以提供更好的保证。另外,不可变的
我可以在Vibed的Diet源代码中看到void compileditString(string Diet\u code,别名…)(OutputStream-stream)函数
我看到它作为一个模板参数占用了无限多的别名
这些别名是什么?我很难通过源代码搞清楚,它使用了很多概念,比如特征和混合,我不是很了解 这些参数是从render和renderCompat传递过来的。发件人:
以下所有参数必须是一对类型和一个字符串,每个参数指定一个参数。参数值可以作为模板参数指定的相同类型的值传递,也可以作为
由于MonoD不允许我在本地添加use dub库,我需要自己编写dub.json。一个好的开始是使用已经存在的模板,例如,dub init,但是不幸的是,这个命令生成的项目使用了一个竞争的dub.sdl,出于某种原因,我找不到任何选项来告诉它创建一个dub.json
如何将dub.sdl转换为dub.json,以便与MonoD一起使用 正如dub init--help所说,有一个选项可以生成JSON文件而不是SDL:
-f——格式=值
设置要用于包说明文件的格式。可能的值:sdl、json
所以
为什么我必须使用显式类型调用isSome和isNone?你不应该推断出这些类型吗
我想这是因为Optional(T)只是一个类型别名?我认为这是一个DMD错误,这一点在本文中也指出了
一旦对模板使用别名,模板参数推断就会失败。您要求它仅推断部分类型。。。虽然这个别名确实让人困惑。我不确定编译器是否可以去掉那么多层模板。不仅是化名,还有Algebriac!(一些!T)也有点隐藏在里面。但我认为它应该能够…。。@AdamD.Ruppe是的,我已经用一种新类型包装了它,现在它可以工作了。
struct
我不知道为什么我在网上找不到答案。这似乎是一件很简单的事情
关联数组有一个byValue成员和一个byKey成员,用于迭代值和键。还有一个byKeyValue成员用于迭代键/值对。只是不清楚使用foreach进行迭代时返回的类型,编译器抱怨auto在这里不够好
语言docs()称之为“不透明类型”
你知道如何让注释过的代码工作吗?谢谢大家!
int main(){
int[string] contained;
contained["foo"] = 4;
contained["bar
额外的逗号是合法的还是因为编译器错误而没有标记为错误?我有很多mixin,它们生成的数组末尾有额外的逗号。我想知道我是否应该花时间把它们移除
即使这样编译也不会出错:
void main(){
int[3] arr = [1, 2, 3,];
}
我认为允许模板(甚至混合)以通用方式工作是合法的:
void main(){
int[3] arr = [1, 2, 3,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,];
Tuple和TypeTuple之间有什么区别?我看过库中的示例代码,但它们看起来很相似。我如何决定使用哪个?为什么Tuple在std.typecons中,而TypeTuple在std.TypeTuple中呢 元组正常值的普通元组
中的typetuple是类型的元组。它可以在编译时使用,就像在这个示例函数中一样,它将函数允许的类型限制为int、long和double
void foo (T) (T arg) {
static assert staticIndexOf!(T,TypeTupl
我现在肯定错过了一些明显的东西,但我不知道如何在D中向动态数组添加元素
我尝试过这一点,但没有成功:
string[] links;
foreach(link; someOtherArray) {
// Do something with link ...
links[] = link; // Trying here to add to the links array
}
这是:
string[] links;
int i = 0;
foreach(link; someOthe
标签: D
introspectionconditional-compilationcompile-time-constant
如何检查变量是否存在,即是否已在D中声明
背景是我想使用版本条件,但仍然有一个默认值:
version(A)
{
immutable int var = 1;
}
version(B)
{
immutable int var = 2;
}
// this is pseudo code
if (var is not yet declared)
{
immutable int var = 3;
}
我只是假设这在D中是可能的,因为它有太多的内省…好吧,考虑到您的用例,您的操作是错误的。
我真正想做的是缓存/记忆某些函数参数和结果。我知道在d中有用户定义的属性,但似乎无法使用它获取运行时值。我弄错了吗?有没有其他类似的设计模式,我可以在这里得到类似的结果
@memoize("expensiveCalc")
int expensiveCalc(string foo){
///bar
}
所以memoize实际上是一个被调用的函数。但是,它利用我的参数值快速散列参数并调用实际函数。
与此类似:
def memoize(iden, time = 0, stale=False,
在D中也定义了退出成功和退出失败。只需导入core.stdc.stdlib即可使用它们。此外,在D中,成功退出是从main()定期返回,失败退出是在未捕获异常的情况下完成的(运行时将捕获它,打印消息,然后返回失败代码)。我正在玩WinAPI应用程序。它让WinMain返回一个int。在这种情况下,请按照文档:(向下滚动到“Return value”)。我已经阅读了这篇文章,谢谢。如果完成了defore消息循环,则应返回0,否则返回message.wParam。但是message.wParam只是
我正在尝试让hello,world程序在codepad.org上运行。这是我的密码:
/* This program prints a
hello world message
to the console. */
import std.stdio;
void main()
{
writeln("Hello, World!");
}
以下是我在以下位置运行时得到的输出:
你知道我做错了什么吗?我几乎只是复制/粘贴了代码。从他们的代码中,codepad.org使用的是D版
我想要所有必需的单个和重复属性,以及右键单击归档文件柜的文档时看到的属性。我在Oracle SQL Developer中尝试了以下查询:
select r_object_id, object_name, r_object_type, title, subject,
r_creation_date, r_modify_date, r_modifier, a_content_type,
i_contents_id, i_cabinet_id,owner_name,i_chronic
我用D语言做了实验,发现std.variant很酷
但我发现这让人困惑
比如说,
import std.stdio;
void main()
{
string x = "";
x ~= 'v';
writeln(x);
}
这就是我们所期望的
但是这个,
import std.stdio;
import std.variant;
void main()
{
Variant x = "";
x ~= 'v';
writeln(x);
}
给出一个难以破译的运行时错误
为
我需要一些关于输出范围及其用途的说明。它表示流元素输出,类似于发送到标准输出,需要支持put()方法,该方法:
在编译时确定范围和元素的功能,并使用最合适的方法输出元素
将元素输出到的何处,用于什么目的
import std.stdio;
import std.range;
void main() {
int[] arr = [1, 2, 3, 4, 5];
auto s = arr;
writeln(s); // [1, 2, 3, 4, 5]
s.put(1
下面给出了windows 32位、dmd.2.052、无标志上的访问冲突。当垃圾收集器运行析构函数时,消息框在进程中似乎已损坏
import std.stdio;
import core.thread;
import core.memory;
import std.concurrency;
class C
{
string m_str;
Tid m_receiverTid;
this(string s, Tid rt) { this.m_str = s; this.m_
代码
编译错误
struct CustomReal
{
private real value;
this(real value)
{
this.value = value;
}
CustomReal opBinary(string op)(CustomReal rhs) if (op == "+")
{
return CustomReal(value + rhs.value);
}
bool opEquals(ref
我想知道如何使用多语言应用程序。使用flag-J似乎是可能的,但是它们不是这个特性的文档。
此页面中给出的链接似乎是错误的
如果你能举个小例子,那就好了。如果不可能使用usage-J标志,则可以在运行时检测或不检测
谢谢
亲切问候我不确定您所说的多语言应用程序是什么意思,-J标志用于importsome_字符串表达式,传递给DMD,DMD只是一个编译器
项目管理不在DMD的范围之内。使用-J标志为DMD提供根路径。您可以将其用作某种系统的一部分,但它是为在编译时导入任意数据块而设计的
编辑:从内
这应该足够简单,但事实并非如此
import std.container, std.stdio;
void main(){
alias Array!double _1D;
alias Array!_1D _2D;
_1D a = _1D();
_2D b = _2D();
a.insert(1.2);
a.insert(2.2);
a.insert(4.2);
b.insert(a);
writeln(b[0][]); // prints [1.2,
为什么D2中不推荐类分配器和DealLocator
还有一个小问题,D中的引用是如何实现的
我在某处看到了关键字ref,但我不知道,引用是如何实现的
你有没有想过全局句柄表和引用只是索引 不推荐使用类分配器和DealLocator,因为使用它们,用户并不真正知道发生了什么,从而导致内存安全或泄漏问题。通常,D程序假定new X与垃圾收集器一起工作,而当分配器被更改时,它可能不会工作,从而导致混乱
相反,如果您想更改分配,您应该提供一个工厂函数,这样就可以清楚地看出这是以不同的方式完成的。与私有构
比如说,我有一个数组:int[]a=。。。我想得到它元素的大小。我可以这样做:a.sizeof/a.length,但它看起来有点复杂,我认为有一种方法可以这样做:ArrayLementType!(a) 西泽夫先生。“ArrayElementType”在D中的外观如何?您只需获取其中一个元素的类型和大小即可
typeof!(a[0]).sizeof
否则,需要获取任何范围(包括数组)的类型
我正在浏览文档,试图找出如何按列进行简单的行选择
在努比,我会做:
a = np.random.randint(0, 20, [4, 6])
# array([[ 8, 5, 4, 18, 1, 4],
# [ 2, 18, 15, 7, 18, 19],
# [16, 5, 4, 6, 11, 11],
# [15, 1, 14, 6, 1, 4]])
a[a[:,2] > 10] # select rows whe
在我们的代码库中将DMD更新为2.094.1时遇到此问题。它是关于什么以及如何修复它的
Deprecation: returning this escapes a reference to parameter this
perhaps annotate the parameter with return
已发出警告,提示返回此信息行:
public ref EventBuilder typeOne()
{
该类型=1;
归还这个;
}
此弃用警告与。在此处添加一个return:
我最近安装了Fedora16(这很好),主要是因为我想尝试LDC2,但也因为GNOMeShell在Fedora上的运行要比Ubuntu 11.10(至少在我的硬件上)平稳得多
LDC2工作得很好,但我想知道,通过输出LLVM.ll/.bc代码,我是否可以在Windows/Mac/Android上编译和运行该应用程序。我可以在使用LLVM的Windows计算机上将.ll/.bc文件编译为ASM.s。然而,我在编译ASM时的第一次尝试给了我一个错误:“找不到‘main’函数。”。通过ASM,我确实看
我有一个Pomotoro计时器,我正试图使用DSSS编译它。它在执行时编译:
dmd pomodoro.d
然而,当我执行
dsss build
在项目目录中,它抱怨:
pomodoro.d => pomodoro
WARNING: Module pomodoro.d does not have a module declaration. This can cause problems
with rebuild's -oq option. If an error o
我现在正在玩关联数组,但我不能
似乎想知道如何向数组中添加其他对象。我
已尝试插入,但无法同时识别两个参数
此外,如果我这样做,它会产生一个错误:
Node[bool] test;
Node node;
Node[bool] temp = [ false:node ];
test ~= temp;
//Error 1 Error: cannot append type Node[bool] to type
//Node[bool] C:\Users\CP\Documents\
在以下代码中:
class A
{
void aMethod() { }
void aConstMethod() const { }
}
class B
{
const A a; // Not initialized in the constructor, but at a latter time
void initA()
{
a = new A(); // Error: can only initialize const member
所以,我和D的关系是一次又一次,一次又一次,在一台新机器上。首先,设置工具链
我想我会再次使用Eclipse+DDT,但是在安装东西之前,我可能会使用一些指导
首先,出于某些原因,我想继续使用Linux,但我也可以使用Windows。对于哪个操作系统更适合D开发,你们有明确的观点吗
第二,我还不是一个硬核程序员,所以开发环境越集成越好。当前版本的Eclipse+DDT真的可用吗?那么代码::块呢?还有别的吗
第三,调试。我真的很感激一个调试器,它能够一步一步地完成源代码,诸如此类的细节。。。我知
项目/dub.sdl
项目/示例/测试/dub.sdl
如果我尝试执行dub run testIf,则会出现以下错误
name "test"
targetType "executeable"
如果我尝试在命令中执行dub run:test,也会发生同样的情况,您应该在子包名称前面加上根包名称
Failed to parse package description for test in Project/examples/test.
Failed to find a package named
我有这样的字符串:
string mystr=“1,2,3,4,5”
我需要将它转换为int的数组,比如:int[]myints。我该怎么做呢?如果您将字符串的格式设置为“[1,2,3]”('['~mystr~']'),您只需导入std.conv并调用mystr2.to即可!(int[])。(空格在这里不重要,只要它以[开头,以]结尾)
否则,如果您有一个int字符串数组([“1”、“2”、“3”]),就像从split调用中得到的一样,您可以使用myarr.to!(int[]),它也会将每个字符
我正在尝试以下代码:
import std.stdio;
import std.range;
void main(){
auto data = [[1,2,3], [4,5,6]]; // putting auto instead of int[][] here makes no difference;
auto coldata = data.transposed;
writeln("coldata: ", coldata); // p
我正在尝试提交一个包含vibe.d图像的多部分表单
我的代码如下所示:
auto f = File("image.jpg");
auto data = new char[f.size];
f.rawRead(data);
string boundary = randomUUID.toString.toUpper();
string h = "--Boundary-" ~ boundary ~ "\r\n";
h ~= `Content-Disp
第一次迭代有效,它打印n,但之后readf()永远不会返回
文档中只有一行解释了readf():
uint readf(A…)(在char[]中表示A参数)
import std.stdio;
void main(){
int n;
while(readf("%d", &n)){
if(n == 11)
break;
writeln(n);
}
}
我做错什么了吗?或者readf()有什么问题吗?我只需要从标准输入中读取数
我似乎不能举一个小例子,但也许有人以前碰到过
我有一个类,Path,它有一个方法void find(),当我尝试在方法内部实例化类型为int[string]的关联数组时,我得到一个链接器错误,如下所示:
/tmp/ccTF0A0c.o: In function `_D6object28__T16AssociativeArrayTAyaTiZ16AssociativeArray6rehashMFNdZHAyai':
game.d:(.text._D6object28__T16Associative
注意:即使我的示例来自OpenGL,这也不是OpenGL问题,而是一般的D问题
背景:在我的游戏项目中,我有一个着色器类来帮助连接GLSL代码。设置制服很有效:
uniform(string name, float value) --> glUniform1f(...)
uniform(string name, mat4 m) --> glUniformMatrix4fv( ...)
etc. etc.
也就是说,它根据参数的类型选择正确的函数,因此当我修改代码时,它会自动更改为使
我不明白为什么我会出错:
关于下一个代码:
void logout(HTTPServerRequest req, HTTPServerResponse res)
{
try
{
logInfo("Logout section");
Json request = req.json;
Json responseBody = Json.emptyObject; //
if (req.session) // if use
我最近在研究D编程语言中文字的细节
因为八进制文字使用0作为数字的前缀,intx=078自然无效。但是为什么intx=08在DMD中是否有效
然而,我用GCC(C编译器)测试了相同的代码,发现两者都是无效的
导入标准stdio;
int main(字符串[]args)
{
//int x=078;//此处错误:应为基数8位,而不是“8”
int x=08;//但此处没有错误
writeln(“x=”,x);
返回0;
}
这是DMD中的错误吗?
提前谢谢
注意:我使用的是DMD32 D编译器v
界面模板如下所示:
interface TemplateInterface(T) {
T x();
}
此接口需要用作函数的参数,但我希望避免在函数签名中定义模板类型。有没有办法让函数签名接受传递给函数的任何模板类型,比如模板化函数
例如:
// no good, do not want to constrain template type at this point
void func1(TemplateInterface!int parm1) {...
// this would b
我试图学习D,但遇到了结构和初始化方面的问题。当以下代码被编译为rdmd-version=templatcode.d时,我会得到一系列错误,如:
> dmd -version=templat code.d
D:\D\dmd2\windows\bin\..\..\src\phobos\std\random.d(1610): Error: static variable initialized cannot be read at compile time
D:\D\dmd2\windows\b
我想得到满足条件的数组的索引。
那么,我想把它们弄得最多
使用Ruby:
# normal array
array.index{|n| n>W }
# 2-dimensional array
matrix.map{|arr| arr.index{|n| n>W}}
如何使用Dlang执行此操作?您可以使用,它接受一个谓词:
[1, 2, 3, 4, 5, 6, 7, 8].countUntil!(c => c > 5).writeln;
要获取max元素的索引,请使
这里我有一个程序,希望
检测它是否是唯一的实例
1.1。它通过尝试创建一个Unix域套接字来实现这一点
并试图将其绑定到特定地址
如果重复程序未运行,则建立UDS
然后听插座
2.1。如果任何消息通过该套接字传入,程序将记录传入的消息
2.2。否则,它应该一直监听套接字
如果有重复的程序,它应该发送一条消息,然后退出
以下是我所拥有的:
导入标准套接字、标准实验记录器;
不可变字符串socketAddress=“\0/tmp/com.localserver.myapp”;
void mai
1 2 3 4 5 6 ...
下一页 最后一页 共 17 页