当前位置:  开发笔记 > 编程语言 > 正文

什么 - >在F#中意味着什么?

如何解决《什么->在F#中意味着什么?》经验,为你挑选了3个好方法。

我一直试图进入和关闭F#一段时间,但我一直在推迟.为什么?

因为无论我尝试查看哪些"初学者"资源,我都会看到开始使用运算符的非常简单的示例->.

然而,我还没有找到任何地方,它提供了这个运算符意味着什么的清晰简单的解释.它似乎必须如此明显,即使完成新手也不需要解释.

因此,我必须非常密集,或者可能是将近三年的经历阻碍了我.

有人可以请,解释它或指向一个可以解释它的真正可访问的资源吗?



1> Brian..:

' - >'不是运营商.它出现在许多地方的F#语法中,其含义取决于它如何用作较大构造的一部分.

在类型中," - >"描述了人们如上所述的函数类型.例如

let f : int -> int = ...

说'f'是一个接受int并返回int的函数.

在lambda中("以'fun'关键字开头的东西"),' - >'是将参数与主体分开的语法.例如

fun x y -> x + y + 1

是一个表达式,它定义了具有给定实现的两个参数函数.

在"匹配"构造中," - >"是将模式与模式匹配时应运行的代码分开的语法.例如,在

match someList with
| [] -> 0
| h::t -> 1

每个' - >'左边的东西都是模式,右边的东西是左边的模式匹配时会发生什么.

理解上的困难可能源于错误的假设,即" - >"是具有单一含义的"运算符".类比可能是"." 在C#中,如果您以前从未见过任何代码,并尝试分析"." 基于查看"obj.Method"和"3.14"以及"System.Collections"的运算符,您可能会非常困惑,因为符号在不同的上下文中具有不同的含义.然而,一旦你了解了足够的语言来识别这些背景,事情就会变得清晰.


现在在`for`循环中它代表`do yield`(`[for i in 0..n - > i]`).
你可以说它是一个类型级别的运算符.而是一种数据类型构造函数.(a - > b)与(a,b)同构.前者中的箭头与后者中的逗号相同.

2> Blair Conrad..:

它基本上意味着"映射到".以这种方式阅读或"变成"或类似的东西.

那么,从20分钟的F#教程开始,

> List.map (fun x -> x % 2 = 0) [1 .. 10];;
val it : bool list
= [false; true; false; true; false; true; false; true; false; true]

代码(fun i - > i%2 = 0)定义了一个匿名函数,称为lambda表达式,它有一个参数x,函数返回"x%2 = 0"的结果,即x是否为甚至.



3> Benjol..:

第一个问题 - 你熟悉C#中的lambda表达式吗?如果是这样的话,那么F#中的 - >与C#中的=>相同(我想你会读到它'去').

- >运算符也可以在模式匹配的上下文中找到

match x with
| 1 -> dosomething
| _ -> dosomethingelse

我不确定这是否也是一个lambda表达式,或其他什么,但我想'转到'仍然成立.

也许你真正指的是F#解析器的'神秘'响应:

> let add a b = a + b
val add: int -> int -> int

这意味着(正如大多数示例所解释的)add是一个'val',它接受两个int并返回一个int.对我来说,这开始时完全不透明.我的意思是,我怎么知道add不是一个带有一个int并返回两个int的val?

嗯,事实是,从某种意义上说,确实如此.如果我只添加一个int,我得到一个(int - > int):

> let inc = add 1
val inc: int -> int

这个(currying)是使F#如此性感的东西之一.

有关F#的有用信息,我发现博客对任何官方"文档"都更有用:以下是一些要查看的名称

Dustin Campbell(这是diditwith.net,在另一个答案中引用)

Don Symes(''男人)

Tomasp.net(又名Tomas Petricek)

安德鲁肯尼迪(计量单位)

Fsharp.it(以项目Euler解决方案而闻名)

http://lorgonblog.spaces.live.com/Blog (又名Brian)

乔莫费舍尔

推荐阅读
手机用户2402851335
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有