【问题标题】:Type mismatch expecting bool list but get int list类型不匹配期望 bool 列表但得到 int 列表
【发布时间】:2015-10-28 12:20:32
【问题描述】:

我将根据 2 个边界过滤 int list。为此,我以这种方式使用了List.filter

let CountFilesInRange ele lowerRang upperRange=  
   match ele with
   | ele when lowerRang< ele< upperRange -> true 
   | _                                   ->false



List.filter (CountFilesInRange  0 5000) listOfSizes

在最后一行中,listOfSizes 出现此错误:

Type mismatch expecting bool list but get int list 

我该如何解决?

【问题讨论】:

  • lowerRang&lt; ele&lt; upperRange 语法无效;试试lowerRang &lt; ele &amp;&amp; ele &lt; upperRange
  • @ildjarn - 看起来它可能是有效的,因为错误在 filter 但是它可能被解析为 (lowerRang &lt; ele) &lt; upperRange 所以 upperRange 被推断为 boolCountFilesInRange 0 5000 有输入bool -&gt; bool
  • 现在还可以,但总是给我一个空列表
  • 请注意,所有match with 表达式都是无用的,因为“范围检查”lower &lt; ele &amp;&amp; ele &lt; upper 已经是一个布尔表达式,您可以简单地返回它

标签: f#


【解决方案1】:
  1. 如 @ildjarn 所说 - 语法无效
  2. 您的参数顺序错误。 您可能想这样做:

例子:

let listOfSizes = [1;2;3;4]

let betweenExclusive lowerBound upperBound value =  
   match value with
   | value when lowerBound < value && value < upperBound -> true 
   | _                                                   -> false

List.filter (betweenExclusive 1 4) listOfSizes |> printfn "%A"

打印:

[2; 3]

链接:

https://dotnetfiddle.net/3179jr

编辑:

感谢@Sehnsucht 的评论。这个函数可以改写为:

let betweenExclusive lowerBound upperBound value =  
   lowerBound < value && value < upperBound 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-02
    • 2013-06-10
    • 1970-01-01
    相关资源
    最近更新 更多