2017-04-21 93 views
2

getClass和getTitle同时返回一个string类型 显然是另一个数组正在返回,但我不知道是否正确推断类型,是这种情况?dlang地图! INT到字符串数组

这是D中的错误吗?
我曾尝试writeln(数组诠释)之前,但不知何故它不与地图工作!串

writeln(listChildren().map!(x=>getClass(x))); 

[x"46 6F 72 65 67 72 6F 75 6E 64 53 74 61 67 69 6E 67 00 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF"c, x"46 6F 72 65 67 72 6F 75 6E 64 53 74 61 67 69 6E 67 00 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF"c, x"74 6F 6F 6C 74 69 70 73 5F 63 6C 61 73 73 33 32 00 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF"c, ...]

writeln(listChildren().map!(x=>getTitle(x))); 

["\0", "\0", "\0", "\0", "\0", "\0", "\0", "\0", "\0", "\0", "\0", "\0", "\0", "\0", "\0", "geany.exe\0", "\0", "\0", x"4D 65 64 69 64 6F 72 20 64 65 20 6C 61 20 62 61 74 65 72 ED 61 00"c, "\0", "Network Flyout\0", "\0", "\0", "geany.exe\0", "geany.exe\0", "geany.exe\0", "geany.exe\0", "geany.exe\0", "geany.exe\0", ...]

注:当我使用

listChildren().map!getClass.each!writeln; 

我得到预期的结果,但我需要与以前的形式合作,谱写新的值

+0

尝试添加'。要!(串[])。加入( “\ n”)'如果每个!writeln是预期的结果 – WebFreak001

+0

这一工程!但是发生了什么,不能写出正确的字符串数组? btw它是.map!(to!字符串).join(“\ n”)' – shuji

+0

它在参数上做了'.to!string'并且一个数组被转换为一个字符串,有点像这样:''[[ arr.each!(a => a.to!string).join(“,”)〜“]”'。其他方面没有其他办法。你想要每一个条目在一个新的行?你想让他们分开空间,而不是分开? +如果你有空字符串,并且没有输出“Nothing”,那么它可能看起来像一个bug – WebFreak001

回答

0

请检查以下代码:

auto s = [1, 2, 3].map!(a => a.to!string); 
pragma(msg, typeof(s)); 

你可以看到,map返回类型是MapResult它可以用来进行迭代上。

map是一个懒惰的函数,它只在求值时才计算值,所以你需要消耗结果的所有元素来得到你需要的值。

.map后面加上.array()为了消耗所有元素并将结果转换为数组,然后writeln他们,你将得到相同的整数数组输出。

writeln(listChildren().map!(x => getClass(x)).array()); 
+0

我也需要导入一些内容才能使用'.array() '?我得到'错误:没有属性'数组'类型'MapResult!(__ lambda2,void * [])'' – shuji

+0

确定我导入了'std.array:array',但我得到了相同的未格式化输出的字符串[] – shuji

+0

getClass的返回类型是什么?如果它的'void *'和你打算返回一个字符串,只返回一个字符串 – Qurashi