我是字节编译模块.它给了我这个警告:
Warning: cl package required at runtime
Run Code Online (Sandbox Code Playgroud)
为什么这是一个警告?我很清楚我正在使用这个cl
包.事实上(require 'cl)
,模块中有一个声明.
使用这些cl
东西有什么问题吗?
如果是,是否有已发布的变通方法列表?我使用的主要内容是mapcan
和delete-duplicates
.
我正在尝试使用hexl模式从文本文件中手动删除一些特殊字符,但是看不到如何在hexl模式下删除任何内容.
我真正想要的是删除回车并保持换行符.Hexl模式是正确的方法吗?
System.Exception.HResult属性受保护.我怎样才能偷看异常并获得HResult而不诉诸于反思或其他丑陋的黑客攻击?
情况就是这样:
我想编写一个备份工具,它可以打开和读取系统上的文件.根据本指南,我使用FileAccess.Read和FileShare.ReadWrite打开文件,因为在我阅读文件时,我不在乎文件是否打开.
在某些情况下,当我读文件被打开另一个应用程序,该System.IO.FileStream.Read()方法引发System.IO.IOException,"该进程无法访问文件,因为另一个进程已锁定的一部分文件".这是错误33,或者我认为HResult 0x80070021.[ 编辑:我相信当另一个进程调用LockFileEx来锁定文件中的字节范围时,可以返回此值.]
当我收到此错误时,我想暂停并重试.我认为这是采取适当的行动.如果锁定进程快速释放字节范围锁,那么我可以继续读取该文件.
出于这个原因,我如何区分IOException?我可以想到这些方法:
我不喜欢这些选择.是不是有更好,更清洁的方式?
我只是搜索并找到System.Runtime.InteropServices.Marshal.GetHRForException.那将返回像0x80070021这样的uint吗?
在某些库代码中,我有一个可以包含50,000个或更多项的List.
库的调用者可以调用导致字符串添加到列表的方法.如何有效地检查要添加的字符串的唯一性?
目前,在添加字符串之前,我扫描整个列表并将每个字符串与要添加的字符串进行比较.这开始显示超过10,000个项目的规模问题.
我将对此进行基准测试,但对洞察力感兴趣.
编辑
一些基本的基准结果.我创建了一个抽象类,它暴露了两种方法:Fill和Scan.填充只用n个项目填充集合(我用了50,000).扫描扫描列表m次(我使用5000)以查看是否存在给定值.然后我为List构建了该类的实现,为HashSet构建了另一个实现.
使用的字符串长度统一为11个字符,并通过抽象类中的方法随机生成.
一个非常基本的微观基准.
Hello from Cheeso.Tests.ListTester
filling 50000 items...
scanning 5000 items...
Time to fill: 00:00:00.4428266
Time to scan: 00:00:13.0291180
Hello from Cheeso.Tests.HashSetTester
filling 50000 items...
scanning 5000 items...
Time to fill: 00:00:00.3797751
Time to scan: 00:00:00.4364431
Run Code Online (Sandbox Code Playgroud)
因此,对于该长度的字符串,当扫描唯一性时,HashSet比List快大约25倍.此外,对于此大小的集合,在向集合添加项目时,HashSet对List没有任何惩罚.
结果很有趣,无效.为了获得有效的结果,我需要进行预热间隔,多次试验,随机选择实施.但我相信这只会略微改变这一点.
感谢大家.
EDIT2
在添加随机化和多重试验之后,HashSet在这种情况下始终优于List,大约20倍.
这些结果不一定适用于可变长度,更复杂对象或不同集合大小的字符串.
我有一个函数获取ZIP文件并将其解压缩到一个目录(我使用DotNetZip库.)
public void ExtractFileToDirectory(string zipFileName, string outputDirectory)
{
ZipFile zip = ZipFile.Read(zipFileName);
Directory.CreateDirectory(outputDirectory);
zip.ExtractAll(outputDirectory,ExtractExistingFileAction.OverwriteSilently);
}
Run Code Online (Sandbox Code Playgroud)
我的ZIP文件包含多个文件和目录.但我想只提取其中一些文件,而不是全部.
我怎样才能做到这一点?
我在Q中看到Chaining任意数量的承诺 ; 我的问题不同.
如何按顺序进行可变数量的调用,每个调用都异步返回?
该场景是一组HTTP请求,其数量和类型由第一个HTTP请求的结果确定.
我想简单地这样做.
我也看到过这样的答案:
var q = require('q'),
itemsToProcess = ["one", "two", "three", "four", "five"];
function getDeferredResult(prevResult) {
return (function (someResult) {
var deferred = q.defer();
// any async function (setTimeout for now will do, $.ajax() later)
setTimeout(function () {
var nextResult = (someResult || "Initial_Blank_Value ") + ".." + itemsToProcess[0];
itemsToProcess = itemsToProcess.splice(1);
console.log("tick", nextResult, "Array:", itemsToProcess);
deferred.resolve(nextResult);
}, 600);
return deferred.promise;
}(prevResult));
}
var chain = q.resolve("start");
for (var i …
Run Code Online (Sandbox Code Playgroud) 在这个答案中,我描述了如何在HttpWebResponse中围绕响应流使用GZipStream包围,以便对其进行解压缩.
相关代码如下所示:
HttpWebRequest hwr = (HttpWebRequest) WebRequest.Create(url);
hwr.CookieContainer =
PersistentCookies.GetCookieContainerForUrl(url);
hwr.Accept = "text/xml, */*";
hwr.Headers.Add(HttpRequestHeader.AcceptEncoding, "gzip, deflate");
hwr.Headers.Add(HttpRequestHeader.AcceptLanguage, "en-us");
hwr.UserAgent = "My special app";
hwr.KeepAlive = true;
using (var resp = (HttpWebResponse) hwr.GetResponse())
{
using(Stream s = resp.GetResponseStream())
{
Stream s2 = s;
if (resp.ContentEncoding.ToLower().Contains("gzip"))
s2 = new GZipStream(s2, CompressionMode.Decompress);
else if (resp.ContentEncoding.ToLower().Contains("deflate"))
s2 = new DeflateStream(s2, CompressionMode.Decompress);
... use s2 ...
}
}
Run Code Online (Sandbox Code Playgroud)
有没有办法让HttpWebResponse自动提供解压缩流?换句话说,我可以从上面的代码中消除以下内容:
Stream s2 = s;
if (resp.ContentEncoding.ToLower().Contains("gzip"))
s2 = new GZipStream(s2, CompressionMode.Decompress);
else if …
Run Code Online (Sandbox Code Playgroud) 在这段代码中:
app.directive( 'myCustomDirective', function() {
return {
restrict: 'EA',
scope: { value: '=myCustomDirective', clickable: '&', editing: '=' },
template: '<span ng-click="handleClick()" ng-bind="value"></span>',
...
Run Code Online (Sandbox Code Playgroud)
什么clickable: '&'
表示?
当我找到Angular文档时,我无法理解它.它似乎是用catch-22代码编写的,只有已经理解了解释内容的人才能理解.
例如,我发现了这个视频,这显然解释了这件事,但他也可能会说普通话.
我有两个代码,在两个不同的java项目中,做了几乎相同的事情,(根据xsd文件解组webservice的输入).
但在一种情况下我应该这样写:(输入是一个占位符名称)(元素是OMElement输入)
ClassLoader clInput = input.ObjectFactory.class.getClassLoader();
JAXBContext jc = JAXBContext.newInstance("input", clInput);
Unmarshaller unmarshaller = jc.createUnmarshaller();
Input input = (Input)unmarshaller.unmarshal( element.getXMLStreamReader() );
Run Code Online (Sandbox Code Playgroud)
在另一个lib中,我必须使用JAXBElement.getValue(),因为它是一个返回的JAXBElement,一个简单的(Input)转换只是崩溃:
Input input = (Input)unmarshaller.unmarshal( element.getXMLStreamReader() ).getValue();
Run Code Online (Sandbox Code Playgroud)
你知道是什么导致了这样的差异吗?