【发布时间】:2015-01-15 19:17:39
【问题描述】:
我有一个具有多种模式的函数。我有两个或多个共享相同的表达式,我想替换它们。现在,如果我在底部写一个where 子句,将其缩进并定义一个新变量,因为我想替换它的表达式将不起作用。
例子:
myFunction firstParam secondParam = expression
myFunction firstParam _ = 1 + expression
where expression = firstParam + secondParam
编译器消息:
Not in scope: `expression'
Not in scope: `secondParam'
我该怎么做?
【问题讨论】:
-
在上面的代码中,永远不会评估第二种情况,因为第一种情况会捕获任何东西,因为
firstParam,secondParam是两个变量。你到底想达到什么目的? -
另外,
where表达式仅适用于第二种情况,因此您的范围内没有secondParam,而第一种情况的范围内也没有expression。跨度> -
@chi:我随机举了一个例子来说明这个问题,所以语义并不重要
标签: haskell pattern-matching where-clause