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
Syntax F#方法定义语法_Syntax_F#_Methods_Definition - Fatal编程技术网

Syntax F#方法定义语法

Syntax F#方法定义语法,syntax,f#,methods,definition,Syntax,F#,Methods,Definition,我有一个方法(在本例中是静态的),但我不太清楚定义它的确切语法 static member FindPath : Queue<Node> startNode : Node endNode : Node nodes : List<Node> = //this method will call two other to be constructed methods and return a //queue that is the return value

我有一个方法(在本例中是静态的),但我不太清楚定义它的确切语法

static member FindPath : Queue<Node> startNode : Node endNode : Node nodes : List<Node> = 
    //this method will call two other to be constructed methods and return a 
    //queue that is the return value of one of them
    return new Queue<Node>()
静态成员FindPath:Queue startNode:Node endNode:Node nodes:List=
//此方法将调用另外两个要构造的方法并返回
//作为其中一个的返回值的队列
返回新队列()
它在
startNode
和第一个节点之间的冒号上失败,原因是:

“标记类型中的语法错误”

创建这样一个方法的最佳方法是什么?

静态成员FindPath(startNode:Node)
static member FindPath (startNode : Node)
                       (endNode : Node)
                       (nodes : List<Node>)
                     : Queue<Node>
   = new Queue<Node>()
(结束节点:节点) (节点:列表) :排队 =新队列()
静态成员FindPath(startNode:Node)
(结束节点:节点)
(节点:列表)
:排队
=新队列()

要使其成为多行,只需在单独的行上进行调用即可

static member FindPath (startNode : Node) (endNode : Node) (nodes : List<Node>) = 
        let resultOfMethod1 = CallMethod1()
        CallMethod2()
        new Queue<Node>()
静态成员FindPath(startNode:Node)(endNode:Node)(nodes:List)=
让resultOfMethod1=CallMethod1()
CallMethod2()
新队列()

我还删除了return类型,因为如果返回这样的队列,则不需要它。要使其成为多行队列,只需在单独的行上进行调用

static member FindPath (startNode : Node) (endNode : Node) (nodes : List<Node>) = 
        let resultOfMethod1 = CallMethod1()
        CallMethod2()
        new Queue<Node>()
静态成员FindPath(startNode:Node)(endNode:Node)(nodes:List)=
让resultOfMethod1=CallMethod1()
CallMethod2()
新队列()

我还删除了返回类型,因为如果返回这样的队列,您不需要它

那么问题就变成了定义这样的多行方法的语法是什么?在F#中,这都是关于缩进的。我注意到这不是你第一次问多行。与方法定义缩进相比,只需将正文缩进4个空格(在VS中,您可以只使用一个选项卡),然后写入正文。当该方法完成时,只需删除最后一级缩进问题就变成了定义这样的多行方法的语法是什么?在F#中,这都是关于缩进的。我注意到这不是你第一次问多行。与方法定义缩进相比,只需将正文缩进4个空格(在VS中,您可以只使用一个选项卡),然后写入正文。方法完成后,只需删除最后一级缩进,因此如果CallMethod2的返回类型是节点队列,那么它将自动返回该节点?顺便说一句,我会同时接受这两个表达式,但不允许这样做。是的,方法的最后一个表达式是返回的表达式。不需要“return”关键字。F#在推断参数类型时发挥了一些真正的魔力。我敢打赌,如果FindPath仅将startNode、endNode和nodes与采用节点或节点列表(视情况而定)的函数一起使用,则可以删除FindPath声明中的所有类型批注。因此,如果CallMethod2的返回类型是一个节点队列,那么它将自动返回该类型?顺便说一句,我会同时接受这两个表达式,但不允许这样做。是的,方法的最后一个表达式是返回的表达式。不需要“return”关键字。F#在推断参数类型时发挥了一些真正的魔力。我敢打赌,如果FindPath仅将startNode、endNode和nodes与采用节点或节点列表(视情况而定)的函数一起使用,则可以删除FindPath声明中的所有类型注释。