Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/fsharp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ember.js/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
F# 如何将参数传递到Async.RunSynchronous?_F#_Mindstorms - Fatal编程技术网

F# 如何将参数传递到Async.RunSynchronous?

F# 如何将参数传递到Async.RunSynchronous?,f#,mindstorms,F#,Mindstorms,如何将参数传递到Async.RunSynchronous 我正在尝试执行以下操作: Async.RunSynchronously (moveAsync brick) open LegoCommands open Lego.Ev3.Core open Lego.Ev3.Desktop [<EntryPoint>] let main argv = let brick = Brick(UsbCommunication()) brick |> connectAsyn

如何将参数传递到Async.RunSynchronous

我正在尝试执行以下操作:

Async.RunSynchronously (moveAsync brick)
open LegoCommands
open Lego.Ev3.Core
open Lego.Ev3.Desktop

[<EntryPoint>]
let main argv =
    let brick = Brick(UsbCommunication())
    brick |> connectAsync |> Async.RunSynchronously |> ignore
    brick |> moveAsync    |> Async.RunSynchronously |> ignore
    brick |> speakAsync   |> Async.RunSynchronously |> ignore

    0 // return an integer exit code
module LegoCommands

open Lego.Ev3.Core
open Lego.Ev3.Desktop
open System.Threading.Tasks
open Arguments

let awaitTask (task: Task) = task |> Async.AwaitIAsyncResult
                                  |> Async.Ignore
let connectAsync (brick:Brick) = async {
    do! brick.ConnectAsync() |> awaitTask }

let moveAsync (brick:Brick) = async {
    do! brick.DirectCommand.TurnMotorAtPowerForTimeAsync(motors, power, uint32 duration, breakEnabled) |> awaitTask }

let speakAsync (brick:Brick) = async {
    do! brick.DirectCommand.PlayToneAsync(volume, frequency, duration) |> awaitTask }
module Arguments
open Lego.Ev3.Core

let volume = 50
let frequency = uint16 3000
let duration = uint16 333
let power = 100
let motors = OutputPort.B ||| OutputPort.C
let breakEnabled = false
当然,这不会编译:

未定义值或构造函数“brick”

我更新了代码,但在将参数传入Async.RunSynchronously时仍遇到相同的问题

客户端:

Async.RunSynchronously (moveAsync brick)
open LegoCommands
open Lego.Ev3.Core
open Lego.Ev3.Desktop

[<EntryPoint>]
let main argv =
    let brick = Brick(UsbCommunication())
    brick |> connectAsync |> Async.RunSynchronously |> ignore
    brick |> moveAsync    |> Async.RunSynchronously |> ignore
    brick |> speakAsync   |> Async.RunSynchronously |> ignore

    0 // return an integer exit code
module LegoCommands

open Lego.Ev3.Core
open Lego.Ev3.Desktop
open System.Threading.Tasks
open Arguments

let awaitTask (task: Task) = task |> Async.AwaitIAsyncResult
                                  |> Async.Ignore
let connectAsync (brick:Brick) = async {
    do! brick.ConnectAsync() |> awaitTask }

let moveAsync (brick:Brick) = async {
    do! brick.DirectCommand.TurnMotorAtPowerForTimeAsync(motors, power, uint32 duration, breakEnabled) |> awaitTask }

let speakAsync (brick:Brick) = async {
    do! brick.DirectCommand.PlayToneAsync(volume, frequency, duration) |> awaitTask }
module Arguments
open Lego.Ev3.Core

let volume = 50
let frequency = uint16 3000
let duration = uint16 333
let power = 100
let motors = OutputPort.B ||| OutputPort.C
let breakEnabled = false
公开立法命令

[<EntryPoint>]
let main argv =
    connectAsync |> Async.RunSynchronously |> ignore
    moveAsync    |> Async.RunSynchronously |> ignore
    speakAsync   |> Async.RunSynchronously |> ignore

    0 // return an integer exit code
我不要这个

module LegoCommands

open Lego.Ev3.Core
open Lego.Ev3.Desktop
open System.Threading.Tasks
open Arguments

let brick = Brick(UsbCommunication())

let awaitTask (task: Task) = task |> Async.AwaitIAsyncResult
                                  |> Async.Ignore
let connectAsync = async {
    do! brick.ConnectAsync() |> awaitTask }

let moveAsync = async {
    do! brick.DirectCommand.TurnMotorAtPowerForTimeAsync(motors, power, uint32 duration, breakEnabled) |> awaitTask }

let speakAsync = async {
    do! brick.DirectCommand.PlayToneAsync(volume, frequency, duration) |> awaitTask }
在“client”的第三行,您使用的是
brick
,此时尚未定义

Async.RunSynchronously (connectAsync brick)
“域”的最后一行也会发生同样的情况:


错误消息准确地告诉您:
brick
未定义。

我不确定我做错了什么

但我不再注意到错误

客户端:

Async.RunSynchronously (moveAsync brick)
open LegoCommands
open Lego.Ev3.Core
open Lego.Ev3.Desktop

[<EntryPoint>]
let main argv =
    let brick = Brick(UsbCommunication())
    brick |> connectAsync |> Async.RunSynchronously |> ignore
    brick |> moveAsync    |> Async.RunSynchronously |> ignore
    brick |> speakAsync   |> Async.RunSynchronously |> ignore

    0 // return an integer exit code
module LegoCommands

open Lego.Ev3.Core
open Lego.Ev3.Desktop
open System.Threading.Tasks
open Arguments

let awaitTask (task: Task) = task |> Async.AwaitIAsyncResult
                                  |> Async.Ignore
let connectAsync (brick:Brick) = async {
    do! brick.ConnectAsync() |> awaitTask }

let moveAsync (brick:Brick) = async {
    do! brick.DirectCommand.TurnMotorAtPowerForTimeAsync(motors, power, uint32 duration, breakEnabled) |> awaitTask }

let speakAsync (brick:Brick) = async {
    do! brick.DirectCommand.PlayToneAsync(volume, frequency, duration) |> awaitTask }
module Arguments
open Lego.Ev3.Core

let volume = 50
let frequency = uint16 3000
let duration = uint16 333
let power = 100
let motors = OutputPort.B ||| OutputPort.C
let breakEnabled = false
参数:

Async.RunSynchronously (moveAsync brick)
open LegoCommands
open Lego.Ev3.Core
open Lego.Ev3.Desktop

[<EntryPoint>]
let main argv =
    let brick = Brick(UsbCommunication())
    brick |> connectAsync |> Async.RunSynchronously |> ignore
    brick |> moveAsync    |> Async.RunSynchronously |> ignore
    brick |> speakAsync   |> Async.RunSynchronously |> ignore

    0 // return an integer exit code
module LegoCommands

open Lego.Ev3.Core
open Lego.Ev3.Desktop
open System.Threading.Tasks
open Arguments

let awaitTask (task: Task) = task |> Async.AwaitIAsyncResult
                                  |> Async.Ignore
let connectAsync (brick:Brick) = async {
    do! brick.ConnectAsync() |> awaitTask }

let moveAsync (brick:Brick) = async {
    do! brick.DirectCommand.TurnMotorAtPowerForTimeAsync(motors, power, uint32 duration, breakEnabled) |> awaitTask }

let speakAsync (brick:Brick) = async {
    do! brick.DirectCommand.PlayToneAsync(volume, frequency, duration) |> awaitTask }
module Arguments
open Lego.Ev3.Core

let volume = 50
let frequency = uint16 3000
let duration = uint16 333
let power = 100
let motors = OutputPort.B ||| OutputPort.C
let breakEnabled = false

为什么它不编译?我想会的。而且,看起来更好;)您可能希望将这两个问题链接在一起。@Fyodor-客户机实际上是编译的。你能详细说明我需要做什么来定义砖块吗。我正在努力学习法语。因此,我不是专业的F#开发人员。要定义
brick
,您需要定义它,就像您在
main
的第一行所做的那样。如果“客户机”编译,则表示您已在上面代码中的某个地方定义了
brick
,而您没有显示给我们。