2010-03-09 52 views
7

我在写我的代码,就好像这些都是同样的事情,并没有问题,但它的开始,当我徘徊迷惑我在Visual Studio中的函数,看到该类型定义包含3种不同类型,我有以为都是一样的。他们是一样的吗?或者它们不同?浮点数组,float []和double []是不同的,还是相同的?

+0

http://msdn.microsoft.com/en-us/library/dd233193.aspx – 2013-08-30 03:19:02

回答

11

他们是相同的。请参阅FSharp.Core文档底部的类型缩写。 float = double = System.Doublearray<'T> = 'T[]。您也可以定义自己的类型的缩写,并利用它们以同样的方式:

type dbl = double 
let (d:dbl) = 1.0 

你没有问这个问题,但要注意的是,一个地方型的缩写可能不是很喜欢你所期望的工作措施类型; float<_>定义的floatdouble,和独立地System.Double,而且也没有这样的东西作为一个相应double<_>System.Double<_>

+0

好吧,谢谢kvb ... – 2010-03-09 20:38:37

7

除了键入的缩写,有两个有用的东西了解F#的类型。首先,有两种方法来编写泛型类型的名称。一种方法是使用OCaml的语法和所述第二方式是使用.NET语法:

  • 当使用.NET语法,则写array<'T>或例如OtherType<'T1, 'T2>(对于类型与一个以上的一般类型参数) 。
  • 在OCaml的语法,同样的事情写为'T array('T1, 'T2) OtherType

这两个符号是等价的 - 当你声明使用.NET语法注释类型的值,你可以将它分配一个值使用OCaml语法进行注释。 'T[]是一个数组特殊的符号,但是这也解释了为什么array<'T>相同'T array

的第二件事情是,F#用来浮点数类型有点可惜命名。这可能是由于与OCaml的相容性,但是它可以很容易混淆.NET程序员:

  • F#浮子类型对应于.NET System.Double(其在C#称为double
  • F#FLOAT32类型对应于在System.Single .NET(其在C#称为float

作为@kvb指出的,是另一个吨yyp别名为System.Double类型。

+1

当然,还有缩写'single',它也是'float32'的同义词, 。和'int = int32 = System.Int32'和'int8 = sbyte = System.SByte'等 – kvb 2010-03-09 21:53:00

相关问题