我想创建一个包含8个元素的字节数组类型的记录字段,但无法找出正确的语法.
我做了类似的事情:
let dataRecord = {
id : int
data : byte array
}
let dataValues : byte array = Array.zeroCreate 8
let myArray = { id = 0; data = dataValues }
Run Code Online (Sandbox Code Playgroud)
可以在记录定义中完成吗?怎么样?
我上面的例子似乎有效,但我不知道它是安全还是最好或最正确的方式.
我对F#很新,所以问题可能相当简单.不过,我找不到任何关于SO的建议.
我正在玩F#中的算法任务.作为第一步,我想从用户控制台输入创建一个整数集合.未定义输入数量.而且我不会使用任何while循环.我希望尽可能多的惯用法.
在递归函数中,我正在读取结果并使用它进行解析Int32.TryParse.我使用匹配bool结果match ... with.如果成功,那么我将一个新值附加到集合.否则我会退回收藏品.
以下是我的代码:
let rec getNumList listSoFar =
let ok, num = Int32.TryParse(Console.ReadLine())
match ok with
| false -> listSoFar
| true -> getNumList num::listSoFar
let l = getNumList []
Run Code Online (Sandbox Code Playgroud)
我得到的错误:
类型不匹配.期待一个'a
但是给'一个列表
我知道我使用的类型不正确,但我不明白到底出了什么问题.任何解释都高度赞赏.
我想计算我的功能,其中一些最多使用三个参数.现在我正在使用下面相同的代码,其中包含三种变体.
let GetTime f (args : string) =
let sw = Stopwatch.StartNew()
f (args)
printfn "%s : %A" sw.Elapsed
Run Code Online (Sandbox Code Playgroud)
我想用这个替换三个函数.
let GetTime f ( args : 'T[]) =
let sW = Stopwatch.StartNew()
match args.Length with
| 1 -> f args.[0]
| 2 -> f (args.[0] args.[1])
printfn "%A" sW.Elapsed
()
Run Code Online (Sandbox Code Playgroud)
但是如果我使用它运行的三个函数,我会收到类型不匹配的错误.是否可以将函数作为参数发送并像这样使用它?
我试图通过以下方式在AutoFixture中使用AutoData功能进行NUnit测试:
[Test]
[AutoData]
public void PharmaciesAndDelegatesShouldBeLinkedEachOther(string s) {
...
}
Run Code Online (Sandbox Code Playgroud)
但是,我在运行测试时收到以下错误.只要我没有传递该参数,测试中的其他所有内容都能正常工作:
结果消息:未提供任何参数.
我究竟做错了什么?
我正在将文件读入如下的数组(注意我知道这是错误的代码):
let filename = if argv.[0] != null then argv.[0] else System.Console.ReadLine()
let data = File.ReadAllLines(filename)
Run Code Online (Sandbox Code Playgroud)
我想对map上面一行返回的数据执行F#.我的问题是,我只能执行mapN·#名单上,而不是System.String[]那个File.ReadAllLines()返回.我可以将标准.Net数组转换为F#列表.我确信我可以用不同的方式读取文件,或者通过手动将数组内容复制到列表来实现,但如果有一种简单的方法可以做到这一点会更容易.
我有这样的数据集
1,2
3,4
5,6
7,8
9,0
Run Code Online (Sandbox Code Playgroud)
当我使用ReadAllLines读取它时,我得到一个字符串数组.到目前为止,我已经将字符串转换为包含字符串的列表数组
[["1";"2"];["3";"4"]... etc
Run Code Online (Sandbox Code Playgroud)
我需要最后一步才能得到这个 [[1;1;[1;4]... etc
我的代码现在:
module Data =
let load(path : string) (filename : string) =
System.IO.File.ReadAllLines(path + "\" + filename)
|> Array.toList
|> Seq.map (fun s -> s.Split [|','|] |> Array.toList)
|> Seq.map (fun s -> s |> Seq.map System.Int32.Parse)
Run Code Online (Sandbox Code Playgroud)
这是我测试它时返回的内容
val it : seq<seq<int>> = seq [seq [1; 2]; seq [3; 4]; seq [5; 6]]
Run Code Online (Sandbox Code Playgroud)
我期待这样的事情
val zz : int list list = [[1; 2]; [3; 4]]
Run Code Online (Sandbox Code Playgroud) 作为从NLog切换到Serilog的一个步骤,我想将NLog标准调用的标准接线重定向LogManager.GetLogger(name)到桥接任何记录到NLog的代码,立即转发到环境Serilog Log.Logger- 即我只想转发一个简单转发的配置消息,没有像Log4net.Appender.SerilogLog4net 那样缓冲.
任何人都可以编造或指向一个规范的片段,正确有效地做到这一点吗?我能想到的要求:
nlog.Warn应该相当于serilog.WarningLogEvent在Serilog术语中)我是事件溯源、事件存储、消息存储和机器学习的新手。
我们正计划实施消息存储,他们提到实施消息存储(而不是传统的 db、crud)的原因是因为消息存储最终有助于深度学习或机器学习。
我对事件存储、CQRS 有基本的了解,但无法理解它与机器学习的关系。
machine-learning database-migration cqrs event-sourcing microservices
我目前正在开始使用EventStore,我正在遵循入门指南。我只是在第一步卡住了,不知道我做错了什么......
我现在使用的版本是20.6.0。
我正在尝试使用 .NET Core Client 将事件写入我的本地实例(该实例正在运行,因为我可以使用 AdminUI 添加事件)。但我得到一个例外,如One or more errors occurred. (Connection 'ES-41230054-2026-4cdb-b2bb-a35824779863' was closed.)'.
尝试修复它一段时间后,我转到.Net Client 指南并粘贴了完全相同的代码:
public static void Main()
{
var conn = EventStoreConnection.Create(new Uri("tcp://admin:changeit@localhost:1113"));
conn.ConnectAsync().Wait();
var data = Encoding.UTF8.GetBytes("{\"a\":\"2\"}");
var metadata = Encoding.UTF8.GetBytes("{}");
var evt = new EventData(Guid.NewGuid(), "testEvent", true, data, metadata);
conn.AppendToStreamAsync("test-stream", ExpectedVersion.Any, evt).Wait();
var streamEvents = conn.ReadStreamEventsForwardAsync("test-stream", 0, 1, false).Result;
var returnedEvent = streamEvents.Events[0].Event;
Console.WriteLine("Read event with data: {0}, metadata: {1}",
Encoding.UTF8.GetString(returnedEvent.Data), …Run Code Online (Sandbox Code Playgroud) 您好,我有一个关于 F# 中异步的问题。
因此,我有一个在后台运行的简单过程,该过程放置在类型的成员中,如下所示:
type Sender() =
member this.Start(udpConectionPool) = async {
(* Some operation that continuously sends something over udp*)
} |> Async.Start
Run Code Online (Sandbox Code Playgroud)
因此,这开始并开始通过 UDP 连续发送帧,而不阻塞程序的其余部分,但有时我想重新启动线程(假设我想添加新端点,它将发送到该udpConnectionPool参数)。
我正在考虑将任务转储给成员之类的事情,然后:
member this.Stop() = async {
do! (*stop async start member that contains task*)
}
Run Code Online (Sandbox Code Playgroud)
然后我可以使用更新的连接池重新启动此任务,但我不知道是否可以做到这一点。
我的问题是,是否可以停止这样的任务,或者如果不能,是否有更好的方法来完成?