这是一个非常特别的例子描述Not in scope: isOne了我的错误:
ignoreFirstOnes :: [Int] -> [Int]
ignoreFirstOnes (1:xs) = dropWhile isOne xs
ignoreFirstOnes xs = xs
where isOne = (== 1)
Run Code Online (Sandbox Code Playgroud)
奇怪的是,isOne函数已定义where,但编译器一直在抱怨.我可以使用警卫甚至改写它,dropWhile (== 1)但我想了解如何使工作成为当前的例子.
where子句中定义的名称仅在where子句附加到的分支上的范围内.
这个版本的定义将编译,因为我将该where子句附加到该ignoreFirstOnes用法的分支isOne.
ignoreFirstOnes :: [Int] -> [Int]
ignoreFirstOnes (1:xs) = dropWhile isOne xs
where isOne = (== 1)
ignoreFirstOnes xs = xs
Run Code Online (Sandbox Code Playgroud)
虽然注意到这个定义相当于ignoreFirstOnes = dropWhile (==1)我认为更简单的定义.
| 归档时间: |
|
| 查看次数: |
59 次 |
| 最近记录: |