WebService 类型混淆
WebService type confusion
我正在使用 this template 创建网络服务。
这是我正在使用的 Web 服务合同:
[<ServiceContract>]
type ISimpleService =
[<OperationContract>]
abstract GetItems: value:int -> Item[]
[<OperationContract>]
abstract InsertItem: composite:Item -> int
- 在哪里可以找到
value
和 composite
的描述?是语言功能还是其他?
- 我想要 GetItem 方法没有任何输入参数并且 InsertItem 没有 return 值(无效)。可能吗?
代码示例中的value
和composite
符号只是参数的名称。这几乎对应于以下 C# 接口:
[ServiceContract]
interface ISimpleService {
[OperationContract]
Item[] GetItems(int value);
[OperationContract]
int InsertItem(Item composite);
}
如果你想改变定义使得InsertItem
不return任何东西并且GetItem
不接受任何东西,你需要改变他们的return并输入类型为 unit
:
[<ServiceContract>]
type ISimpleService =
[<OperationContract>]
abstract GetItems: unit -> Item[]
[<OperationContract>]
abstract InsertItem: composite:Item -> unit
unit
类型(大致)对应于 C# 中的 void
当用作 return 类型时,这也是它的编译方式。当用作输入时,unit
对应于一个空参数列表(并且它是这样编译的)。
这听起来可能会令人困惑,但是 unit
类型是一种 F# 类型,只有一个值写为 ()
,所以当您调用 foo()
时,您实际上是在传递该值unit
类型作为参数。这需要一些时间来适应,但它使语言变得优雅简单。
我正在使用 this template 创建网络服务。
这是我正在使用的 Web 服务合同:
[<ServiceContract>]
type ISimpleService =
[<OperationContract>]
abstract GetItems: value:int -> Item[]
[<OperationContract>]
abstract InsertItem: composite:Item -> int
- 在哪里可以找到
value
和composite
的描述?是语言功能还是其他? - 我想要 GetItem 方法没有任何输入参数并且 InsertItem 没有 return 值(无效)。可能吗?
代码示例中的value
和composite
符号只是参数的名称。这几乎对应于以下 C# 接口:
[ServiceContract]
interface ISimpleService {
[OperationContract]
Item[] GetItems(int value);
[OperationContract]
int InsertItem(Item composite);
}
如果你想改变定义使得InsertItem
不return任何东西并且GetItem
不接受任何东西,你需要改变他们的return并输入类型为 unit
:
[<ServiceContract>]
type ISimpleService =
[<OperationContract>]
abstract GetItems: unit -> Item[]
[<OperationContract>]
abstract InsertItem: composite:Item -> unit
unit
类型(大致)对应于 C# 中的 void
当用作 return 类型时,这也是它的编译方式。当用作输入时,unit
对应于一个空参数列表(并且它是这样编译的)。
这听起来可能会令人困惑,但是 unit
类型是一种 F# 类型,只有一个值写为 ()
,所以当您调用 foo()
时,您实际上是在传递该值unit
类型作为参数。这需要一些时间来适应,但它使语言变得优雅简单。