让我们上这堂课:
type Test() =
let mutable Flag1 : bool = false
[<DefaultValue>] val mutable Flag2 : bool
do
Flag1 <- true // that works
Flag2 <- true // nope... why?
member this.SetFlag =
Flag1 <- true // no 'this' instance? does that mean it's static?
this.Flag2 <- true // that works now, but still no way to set a default value
Run Code Online (Sandbox Code Playgroud)
[<DefaultValue>]当我希望能够将值设置为我自己的任何值时,为什么我需要?
然后现在:
type Test2() =
Inherit(Test)
do
Flag1 <- true // not accessible
Flag2 <- true // not …Run Code Online (Sandbox Code Playgroud) 让我们考虑一下这段代码:
let getBuildDate (assembly: Assembly) : DateTime option =
let buildVersionMetadataPrefix = "+build"
let attribute = assembly.GetCustomAttribute<AssemblyInformationalVersionAttribute>()
if attribute <> null && attribute.InformationalVersion <> null then
let value = attribute.InformationalVersion
let index = value.IndexOf(buildVersionMetadataPrefix)
if index > 0 then
let value = value.Substring(index + buildVersionMetadataPrefix.Length)
let success, timestamp = DateTime.TryParseExact(value, "yyyyMMddHHmmss", CultureInfo.InvariantCulture, DateTimeStyles.None)
if success then
Some timestamp
else
None
else
None
else
None
Run Code Online (Sandbox Code Playgroud)
有没有办法摆脱所有的“else None”语句而只有一个?
一方面,我可以想象,对于某些人来说,代码更清晰,所有 None 语句都拼出来了,但另一方面,来自 C 世界,我认为它是混乱的,降低了可读性。
在很多情况下,您需要满足一系列条件,并且所有失败的案例都集中在一个地方。
如果我有一个依赖于彼此成功的条件列表,我怎样才能做到简洁的短退出而不重复。
使用 FsToolkit.ErrorHandling 并查看此示例时:
testCase "Happy Path Result" <| fun () ->
let actual : Validation<int, string> = validation {
let! a = Ok 3
and! b = Ok 2
and! c = Ok 1
return a + b - c
}
Run Code Online (Sandbox Code Playgroud)
和是什么意思!?看起来就像让!被映射到 Result.bind,但我没有看到let! 之间有不同的行为!和!
据我所知,它看起来像是替换并且!与让!保持相同的行为。
我刚刚开始涉足计算表达式,事情开始有意义,尽管我不太明白为什么 F# 关键字(如 let )和实际函数(如 bind)之间有不同的命名法,因此它增加了一层混乱。所以这个问题的答案可能是显而易见的:)
当我在网络上寻找有关 IIS 的任何信息时,我发现了大量关于 IIS 7 和 8 的链接,但几乎没有关于 IIS 10 的链接,以至于我什至怀疑它是否存在,即使我正在运行它。
There are many posts about connection limits in the non server editions of windows; absolutely nothing regarding windows 10.
My question is: Is there a limit to the number of simultaneous connections in Windows10/IIS 10 (so we should get Windows Server 2016)?
当我看看如何将时间转换为NodaTime时,我发现很多帖子,但没有直接回答我需要什么.
我有:
- A DateTime object (DateTime myDateTime)
- An Olson timezone (var TZ = "America/Los_Angeles")
Run Code Online (Sandbox Code Playgroud)
我想要:
- A ZonedDateTime object (ZonedDateTime myZonedDateTime)
Run Code Online (Sandbox Code Playgroud)
理想情况下,我正在寻找一些帮助:
var myZonedDateTime = ZonedDateTime.From(myDateTime, TZ);
Run Code Online (Sandbox Code Playgroud)
但我看到的所有样本都将日期转换为字符串然后解析字符串,这看起来很奇怪.
有一个ZonedDateTime.FromDateTimeOffset()方法,但偏移量和TimeZone是不同的东西,因为TZ可以处理夏令时.
我有 ES 文档,其中一个字段是一个 guid。
\n\n当我尝试进行匹配时,破折号会严重破坏我的搜索,并且我会得到一堆不相关的部分匹配项。
\n\n由于该字段是一个 guid,因此它始终需要精确匹配。
\n\n在 Kibana 中,我可以将 guid 用引号引起来,并且得到精确匹配;对于 NEST,引号 don\xe2\x80\x99t 没有帮助。我也尝试过逃避破折号,但没有成功。
\n\n我需要按原样存储 guid,因为在某些情况下我必须检索完整的 guid 文档,因此我可以\xe2\x80\x99t 删除其中的破折号。
\n\n有没有办法用 NEST 标记该字段,以便当我查询时只返回完全匹配的内容?
\n\n编辑:\n根据下面的答案,这就是我所做的:
\n\n我将 [Nest.Keyword] 添加到 guid 字段
我这样查询:
\n\nvar R = await _ElasticClient.SearchAsync<PictureObject>(Sr => Sr\n .Query(Q => Q.Term(Te => Te\n .Field(F => F.AlbumId) <- the guid field\n .Value(IdString)); <- my value\nRun Code Online (Sandbox Code Playgroud)但这不会返回任何内容。
\n\n弹性站点的文档给出了一个示例(https://www.elastic.co/guide/en/elasticsearch/client/net-api/current/terms-query-usage.html):
\n\nq\n.Terms(c => c\n.Name("named_query")\n.Boost(1.1)\n.Field(p => p.Description)\n.Terms("term1", "term2")\n)\nRun Code Online (Sandbox Code Playgroud)\n\n我找不到任何有关 …
sprintfn在 F#中有几页提到。
其中之一是经典之作:https : //fsharpforfunandprofit.com/posts/fsharp-in-60-seconds/
但也是在这里,在 Tomas 的回答中:“表达式问题”是否可以在 F# 中解决?
不过我好像不能用,好像没有定义。它是否从语言中删除?
具有以下内容:
let a = "hello world".Split(' ')
Run Code Online (Sandbox Code Playgroud)
返回类型是一个字符串数组,但类型写为:
System.String[]
我不明白为什么:
[| ... |]但它显示为[ ... ]类型[ ... ]但它显示为x list类型另一个例子:
([| 3 |]).GetType()
val it : System.Type =
System.Int32[]
Run Code Online (Sandbox Code Playgroud)
为什么会这样?
这是一个函数:
let newPositions : PositionData list =
positions
|> List.filter (fun x ->
let key = (x.Instrument, x.Side)
match brain.Positions.TryGetValue key with
| false, _ ->
// if we don't know the position, it's new
true
| true, p when x.UpdateTime > p.UpdateTime ->
// it's newer than the version we have, it's new
true
| _ ->
false
)
Run Code Online (Sandbox Code Playgroud)
它按预期编译。
让我们关注两行:
let key = (x.Instrument, x.Side)
match brain.Positions.TryGetValue key with
Run Code Online (Sandbox Code Playgroud)
Brain.Positions是 Map<Instrument * Side, PositionData> 类型
如果我将第二行修改为:
match …Run Code Online (Sandbox Code Playgroud) 我想替换以下代码:
var R = Challenges.FindAll().SetSortOrder("UseCount").First();
var Q = Query.EQ("_id", R._id);
var U = Update.Inc("UseCount", 1);
Challenges.Update(Q, U);
return R;
Run Code Online (Sandbox Code Playgroud)
这是意图:
我在一个名为'UseCount'的数据库中有一个字段,我想找到值较低的记录.如果许多记录具有相同的值,我只想要第一个(它并不重要).
同时,我希望将"UseCount"字段增加一个.
我已经看过FindAndModify的例子,但它似乎与字段比较(即:"field"= value),而不是像我正在做的搜索.
处理这个问题的最佳/最有效方法是什么?