【发布时间】:2015-02-28 09:25:55
【问题描述】:
我在 F# 中写过这样的函数:
let TwistBasket (reverse: bool, quarters: int, overTwist: int byref) =
overTwist <- 50
WaitForBasketReady()
waitBasket.Reset()
let move = 135*quarters - 25 + overTwist
let speed =
match reverse with
| true -> -75y
| false -> 75y
let waitHandle = motorBasket.SpeedProfile(speed, 15u, uint32 move, 10u, true)
Task.Factory.StartNew(fun () ->
waitHandle.WaitOne()
if (overTwist <> 0) then
motorBasket.SpeedProfile(sbyte -speed, 0u, uint32 overTwist, 0u, true).WaitOne()
waitBasket.Set()
关于这个 if 语句;
if (overTwist <> 0) then
motorBasket.SpeedProfile(sbyte -speed, 0u, uint32 overTwist, 0u, true).WaitOne()
我收到错误:This expression was expected to have type unit but here has type bool.
其实motorBasket.SpeedProfile().WaitOne()returns布尔语句。我需要它。
因为我试图在 C# 中转换这个 if else 语句:
Task.Factory.StartNew(() =>
{
waitHandle.WaitOne();
if (overTwist != 0)
{
motorBasket.SpeedProfile((sbyte) -speed, 0, (uint) overTwist, 0, true).WaitOne();
}
waitBasket.Set();
});
如何解决我的错误?
【问题讨论】:
-
您是否尝试在表达式中添加 |> ignore?
-
如果我添加 |> 忽略,我仍然调用获取结果吗?因为这对我来说很重要。
-
你想对结果做什么?在 C# 版本中它只是忽略它。
-
感谢您的帮助古斯塔沃。但实际上我会再次遇到类似的问题,在接下来的陈述中,Petr 的方法可能会更有用。
-
不用担心。原则上我会坚持使用 C# 版本,然后一旦完成工作翻译,我可能会重构。你的选择!