类型 'IpLoc option' 不包含字段 'ip'
The type 'IpLoc option' does not contain a field 'ip'
我有一个 return 记录类型的函数,但编译器抱怨:
The type 'IpLoc option' does not contain a field 'ip'
函数如下所示:
let validIp (list : IpRanges list) (ip:string) : option<IpLoc> =
list
|> Seq.pick (fun e ->
let range = IPAddressRange.Parse(e.ipStartEnd);
match range.Contains(IPAddress.Parse(ip)) with
| true -> Some({ip=ip; subnet=e.subnet; gateway=e.gateway})
| false -> None
)
类型是
type IpLoc =
{ ip : String
subnet : String
gateway : String }
我做错了什么?
函数Seq.pick
return是第一个值,其中提供的函数return是一个一些值.见文件:https://msdn.microsoft.com/en-us/library/vstudio/ee353772(v=vs.100).aspx
例如:
let aseq = [ 'a'; 'b'; 'c' ]
let picked = aseq |> Seq.pick (fun e -> if e = 'b' then Some 42 else None)
>
val picked : int = 42
因此您的 validIp
函数 return 是 IpLoc
类型的值,而不是声明的 Option<IpLoc>
类型的值。
更改函数类型或将 returning 值更改为 Option 类型或使用具有与 returns Option 值相似签名的 **Seq.tryPick**
函数。
请注意,如果提供的函数 returns Some value.[=22 中没有序列中的元素,则 Seq.pick
会抛出异常 (KeyNotFoundException) =]
如果需要return IpLoc
:
let validIp (list : IpRanges list) (ip:string) : IpLoc =
list
|> Seq.pick (fun e ->
let range = IPAddressRange.Parse(e.ipStartEnd);
match range.Contains(IPAddress.Parse(ip)) with
| true -> Some({ip=ip; subnet=e.subnet; gateway=e.gateway})
| false -> None
)
如果需要return Option<IpLoc>
:
let validIpOption (list : IpRanges list) (ip:string) : Option<IpLoc> =
list
|> Seq.tryPick (fun e ->
let range = IPAddressRange.Parse(e.ipStartEnd);
match range.Contains(IPAddress.Parse(ip)) with
| true -> Some({ip=ip; subnet=e.subnet; gateway=e.gateway})
| false -> None
)
我有一个 return 记录类型的函数,但编译器抱怨:
The type 'IpLoc option' does not contain a field 'ip'
函数如下所示:
let validIp (list : IpRanges list) (ip:string) : option<IpLoc> =
list
|> Seq.pick (fun e ->
let range = IPAddressRange.Parse(e.ipStartEnd);
match range.Contains(IPAddress.Parse(ip)) with
| true -> Some({ip=ip; subnet=e.subnet; gateway=e.gateway})
| false -> None
)
类型是
type IpLoc =
{ ip : String
subnet : String
gateway : String }
我做错了什么?
函数Seq.pick
return是第一个值,其中提供的函数return是一个一些值.见文件:https://msdn.microsoft.com/en-us/library/vstudio/ee353772(v=vs.100).aspx
例如:
let aseq = [ 'a'; 'b'; 'c' ]
let picked = aseq |> Seq.pick (fun e -> if e = 'b' then Some 42 else None)
>
val picked : int = 42
因此您的 validIp
函数 return 是 IpLoc
类型的值,而不是声明的 Option<IpLoc>
类型的值。
更改函数类型或将 returning 值更改为 Option 类型或使用具有与 returns Option 值相似签名的 **Seq.tryPick**
函数。
请注意,如果提供的函数 returns Some value.[=22 中没有序列中的元素,则 Seq.pick
会抛出异常 (KeyNotFoundException) =]
如果需要return IpLoc
:
let validIp (list : IpRanges list) (ip:string) : IpLoc =
list
|> Seq.pick (fun e ->
let range = IPAddressRange.Parse(e.ipStartEnd);
match range.Contains(IPAddress.Parse(ip)) with
| true -> Some({ip=ip; subnet=e.subnet; gateway=e.gateway})
| false -> None
)
如果需要return Option<IpLoc>
:
let validIpOption (list : IpRanges list) (ip:string) : Option<IpLoc> =
list
|> Seq.tryPick (fun e ->
let range = IPAddressRange.Parse(e.ipStartEnd);
match range.Contains(IPAddress.Parse(ip)) with
| true -> Some({ip=ip; subnet=e.subnet; gateway=e.gateway})
| false -> None
)