【问题标题】:Quartz.NET and F# - SystemTime and KeyMatcherQuartz.NET 和 F# - SystemTime 和 KeyMatcher
【发布时间】:2015-04-17 17:03:37
【问题描述】:

我正在尝试在 F# 中使用 Quartz.NET,但遇到了一些问题,虽然 Quartz.NET 在 F# 中可用,但似乎没有太多关于它的文档,而且我已经它与 C# 中的内容之间存在一些差异。

我目前遇到的一个问题是设置 SystemTime,如本问题所示, Quartz.net + testing with SystemTime.UtcNow.

我可能错了,但我认为 F# 中的代码应该是:

SystemTime.Now = fun () -> DateTime(someDate)
SystemTime.UtcNow = fun () -> DateTime(someDate)

但我收到一个错误,即参数或函数在预期之外的地方使用过多。如果我只使用 DateTime 构造函数,我会收到一个与它期望一个函数有关的错误。

【问题讨论】:

  • 欢迎来到 Stack Overflow。如果您有两个问题,那么请提出两个不同的问题。我已经编辑了你的第二个问题(但你可以通过你问题的版本历史来取回它)。
  • 我很抱歉。尽管由于两者都与在 F# 中使用 Quartz.net 有关,但将它们一起询问会很无聊。稍后我将针对另一个问题发布一个单独的问题。
  • 不用担心。如果您分别发布每个问题,您将有更好的机会得到回答,因为有些人可能能够回答一个问题,而其他人可能会回答另一个问题。如果您对单个问题有更多答案,还可以更轻松地将其中一个问题标记为正确答案。

标签: f# quartz.net c#-to-f# quartz.net-2.0


【解决方案1】:

单个= 是一个相等比较操作。如果要进行赋值,请使用<- 赋值运算符。

除此之外,F# 函数与Func<T> 不同。通常,当您将它们用作方法参数时,转换会自动发生,但在这种情况下,您似乎需要显式执行转换:

open System
open Quartz

SystemTime.Now <- 
    Func<DateTimeOffset>(
        fun () -> DateTimeOffset(DateTime(2015, 4, 18), TimeSpan.FromHours 2.))
SystemTime.UtcNow <- 
    Func<DateTimeOffset>(
        fun () -> DateTimeOffset(DateTime(2015, 4, 18), TimeSpan.FromHours 2.))

从 F# 调用它们也有点复杂:

> SystemTime.Now.Invoke();;
val it : DateTimeOffset = 18.04.2015 00:00:00 +02:00
> SystemTime.UtcNow.Invoke();;
val it : DateTimeOffset = 18.04.2015 00:00:00 +02:00

【讨论】:

  • 谢谢,但我仍然收到“此函数需要太多参数或在不期望函数的上下文中使用。”的错误。
  • 基本上只是使用 someDate 作为填充物,而不是在问题中输入实际日期,因为认为无关紧要。我认为因为在尝试使代码正常工作时填写了一个容易输入的日期实际上是SystemTime.Now &lt;- fun () -&gt; DateTime(2015,1,1,1,1,1) 但是确实遇到了一些应该使用 DateTimeOffset 的东西所以现在也尝试了以下方法SystemTime.Now &lt;- fun () -&gt; DateTimeOffset(DateTime(2015,1,1,1,1,1)) 但两者都给出了同样的错误。
  • @Sean 更新了我的答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-09-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-04
  • 2011-01-15
  • 1970-01-01
相关资源
最近更新 更多