我正在使用this template来创建网络服务。
这是我正在使用的Web服务合同:
[<ServiceContract>]
type ISimpleService =
[<OperationContract>]
abstract GetItems: value:int -> Item[]
[<OperationContract>]
abstract InsertItem: composite:Item -> int
value
和composite
说明?是语言功能还是别的什么?答案 0 :(得分:3)
代码示例中的value
和composite
符号只是参数的名称。这几乎对应于以下C#接口:
[ServiceContract]
interface ISimpleService {
[OperationContract]
Item[] GetItems(int value);
[OperationContract]
int InsertItem(Item composite);
}
如果您想更改定义,以便InsertItem
不返回任何内容而GetItem
不会带任何内容,则需要将其返回和输入类型更改为unit
:
[<ServiceContract>]
type ISimpleService =
[<OperationContract>]
abstract GetItems: unit -> Item[]
[<OperationContract>]
abstract InsertItem: composite:Item -> unit
当用作返回类型时,unit
类型(粗略地)对应于C#中的void
,这也是它的编译方式。当用作输入时,unit
对应于一个空参数列表(并且它是如此编译的)。
这可能听起来令人困惑,但unit
类型是F#类型,只有一个值写为()
,因此当您调用foo()
时,实际上是传递了类型的值unit
作为论据。这需要一些时间来习惯,但它使语言优雅简单。