我在这里有点沮丧.我知道我已经掌握了所有的东西,但我无法弄清楚如何将它们结合起来......
let saveImageToDisk path content =
async {
use s = new FileStream(path, FileMode.OpenOrCreate)
do! s.AsyncWrite(content)
printfn "Done writing %A" path
} // returns Async<unit>
let getImages imageUrls =
imageUrls
|> Seq.map (fun url -> topath url, getImage url)
//Next line not happy because content is Async<byte[]> instead of byte[]
|> Seq.map (fun (path, content) -> saveImageToDisk path content)
|> Async.Parallel
|> Async.RunSynchronously
Run Code Online (Sandbox Code Playgroud) 我一直在尝试在F#项目中使用Pex,但我遇到了几个问题,我将不胜感激一些帮助:
Visual Studio Pex插件工作半小时,而不是复杂的项目探索.
之后,每次从Visual Studio 2010中运行Pex Exploration时,都会收到!warning! [metadata] no explorations found after applying all filters; did you forget a [PexClass] or [PexMethod] attribute?错误消息.如果我在进行探索时复制并粘贴visual studio运行的命令并删除一些属性(如sourceFilter ...)并从命令控制台运行它,那么我会得到一些生成的测试.知道为什么visual studio会产生无效命令吗?
一段时间后,Microsoft.Pex.Framework.dll从.Net Reference列表中消失,我必须使用其文件路径手动引用它,否则我甚至无法再引用它,我必须卸载/重新安装Pex.(A reference to C:\Program Files (x86)\Microsoft Moles\PublicAssemblie\Microsoft.Pex.Framework.dll could not be added. Please make sure that the file is accessible, and that it is a valid assembly or COM component.)
当我在C#项目上工作时,不会发生所有这些问题.
问题1 2 3发生在学术版本中.
使用可用于MSDN订阅者的版本我从未在Visual Studio(Visual Studio 2010 Ultimate NO SP1)中使用它.但它在命令提示符下工作.我没有遇到这个版本的问题3.
有没有人设法让Pex在Visual Studio中使用F#?如果是,你可以告诉我你是怎么做到的吗?你使用哪个版本(VS和Pex)?
很抱歉,如果这是重复的,但我不太确定我需要使用哪些术语来查找此问题的现有答案.
我正在尝试提高应用程序的启动性能,伪代码看起来有点像这样.
LoadBigFileFromDisk(); //slow
SetupNetwork(); //even slower
UseBigFileFromDisk();
Run Code Online (Sandbox Code Playgroud)
我认为第一步是磁盘绑定,另一个是网络绑定(并且速度较慢),我可以在后台线程中运行第一步(当前正在玩ThreadPool.QueueUserWorkItem,但不确定这是否是最好的方式)并提高性能一点点.
它有效,但令我担心的是,我依靠的第二步足够慢,第一步完成.
我知道我可以在_done某个地方设置一个布尔值while !,但是有更优雅/惯用的解决方案吗?
(不是.Net 4.0,所以虽然我对基于任务的感兴趣,但我需要后备解决方案).
我知道(||>)哪个了(a' * 'b) -> ('a -> b' -> 'c) -> 'c
但我发现这非常有用,并想知道我是否重新发明了轮子:
// ('a * 'a) -> ('a -> 'b) -> ('b * 'b)
let inline (|>>) (a,b) f = (f a, f b)
Run Code Online (Sandbox Code Playgroud)
(*它可能发生,我ceil半小时前才发现这个功能!)
我有一台运行 Windows 10 的计算机,我想在其上托管 git 存储库。OpenSSH 正在运行,我可以通过 Powershell 通过 SSH 连接到机器,因此它是可连接的。
我在该机器上名为 Test 的文件夹中创建了一个新的 git via
git init --shared --bare
Run Code Online (Sandbox Code Playgroud)
我现在尝试使用 Sublime Merge 和源 URL 进行克隆,如下所示:
ssh://USER@IP:/Test
Run Code Online (Sandbox Code Playgroud)
但是,当我输入密码后,出现两个错误:
fatal: "/Test" does not appear to be a git repository
fatal: Could not read from remote repository
Run Code Online (Sandbox Code Playgroud)
我尝试过用谷歌搜索这两个问题,但没有得到任何有帮助的信息。有人能帮忙吗?
编辑:我可以在远程计算机上本地克隆、提交和推送,所以它绝对是一个 git 存储库。
编辑#2:已修复。遵循本指南,了解如何通过强制存储库使用 powershell(最底部)来直接指向 git 文件夹https://github.com/PowerShell/Win32-OpenSSH/wiki/Setting-up-a-Git-server-on -Windows-使用-Git-for-Windows-and-Win32_OpenSSH
**请注意,由于已知问题,git clone user@domain@servermachine:C:/test/myrepo.git 不起作用。解决这个问题,将 powershell 设置为注册表中的默认 Shell。或者当 cmd 是默认 shell 时执行以下步骤:
Run Code Online (Sandbox Code Playgroud)cd c:\mygitrepros # initialize a local repo folder git init mylocalrepo cd mylocalrepo # …
尝试更新图像时出现此错误.这是一个跨线程更新,但我使用.Invoke(),所以这不应该是问题,如果它.
我正在尝试使用给定的增量在两个值之间进行插值.
[ 1.0 .. 0.5 .. 20.0 ]
Run Code Online (Sandbox Code Playgroud)
编译器告诉我这已被弃用,并建议使用ints然后转换为float.但是如果我有一个小数增量,这似乎有点啰嗦 - 我是否必须将我的开始值和结束值除以我的增量,然后再将多次除以?(yeuch!).
我曾经看过一些关于使用序列理解来做这件事的事情,但我不记得是怎么回事.
请帮忙.
变异状态是构建器模式的中心.有没有一种惯用的方法来实现F#中这样一个类的内部,它将减少/消除可变状态,同时保留通常的接口(这个类主要用于其他.NET语言)?
这是一个天真的实现:
type QueryBuilder<'T>() = //'
let where = ref None
let orderBy = ref None
let groupBy = ref None
member x.Where(cond) =
match !where with
| None -> where := Some(cond)
| _ -> invalidOp "Multiple WHERE clauses are not permitted"
// members OrderBy and GroupBy implemented similarly
Run Code Online (Sandbox Code Playgroud)
一种想法是创建一个记录类型来存储内部,并使用复制和更新表达式.
type private QueryBuilderSpec<'T> = //'
{ Where : ('T -> bool) option; //'
OrderBy : (('T -> obj) * bool) list; //'
GroupBy : ('T -> obj) …Run Code Online (Sandbox Code Playgroud) dataElementsList : TypesAndData.DataElement list
Run Code Online (Sandbox Code Playgroud)
是一个包含50,000条记录的列表(实际上还有更多记录,但让我们从小开始).我正在尝试序列化为JSON文件:
let ser = Json.DataContractJsonSerializer(typeof<TypesAndData.DataElement list>)
use ofs = File.OpenWrite(fileName)
let result = ser.WriteObject(ofs, dataElementsList)
Run Code Online (Sandbox Code Playgroud)
并得到臭名昭着的StackOverflowException.准确地说:
FSharp.Core.dll中发生了未处理的"System.StackOverflowException"类型异常
任何建议?
stack-overflow f# datacontractserializer netdatacontractserializer