WebService类型混乱

时间:2015-02-22 20:06:01

标签: f# unit-type

我正在使用this template来创建网络服务。

这是我正在使用的Web服务合同:

[<ServiceContract>]
type ISimpleService =
    [<OperationContract>]
    abstract GetItems: value:int -> Item[]
    [<OperationContract>]
    abstract InsertItem: composite:Item -> int
  1. 我在哪里可以找到valuecomposite说明?是语言功能还是别的什么?
  2. 我想GetItem方法没有任何imput参数,而InsertItem也没有返回值(void)。有可能吗?

1 个答案:

答案 0 :(得分:3)

代码示例中的valuecomposite符号只是参数的名称。这几乎对应于以下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作为论据。这需要一些时间来习惯,但它使语言优雅简单。