【问题标题】:WebService type confusionWebService 类型混淆
【发布时间】:2015-02-22 20:06:00
【问题描述】:

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

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

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

【问题讨论】:

    标签: f# unit-type


    【解决方案1】:

    代码示例中的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 类型的值作为参数传递.这需要一些时间来适应,但它使语言非常简单。

    【讨论】:

      猜你喜欢
      • 2013-12-31
      • 1970-01-01
      • 2018-07-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-29
      • 2019-03-15
      相关资源
      最近更新 更多