Where 子句应用于多个模式
Where Clause Applied To Multiple Patterns
我有一个具有多种模式的函数。我有两个或更多它们共享相同的表达式,我想替换它们。现在,如果我在底部写一个 where
子句,缩进它并定义一个新变量作为我想替换的表达式,它将不起作用。
示例:
myFunction firstParam secondParam = expression
myFunction firstParam _ = 1 + expression
where expression = firstParam + secondParam
编译器消息:
Not in scope: `expression'
Not in scope: `secondParam'
我该怎么做?
您可以将模式匹配分解为一个案例。例如:
myFunction :: Int -> Int -> Int
myFunction a b = case (a, b) of
(0, 4) -> x
(_, b) -> x + b
where
x = a + b
这里 x
在两个案例分支中都可见。
我有一个具有多种模式的函数。我有两个或更多它们共享相同的表达式,我想替换它们。现在,如果我在底部写一个 where
子句,缩进它并定义一个新变量作为我想替换的表达式,它将不起作用。
示例:
myFunction firstParam secondParam = expression
myFunction firstParam _ = 1 + expression
where expression = firstParam + secondParam
编译器消息:
Not in scope: `expression'
Not in scope: `secondParam'
我该怎么做?
您可以将模式匹配分解为一个案例。例如:
myFunction :: Int -> Int -> Int
myFunction a b = case (a, b) of
(0, 4) -> x
(_, b) -> x + b
where
x = a + b
这里 x
在两个案例分支中都可见。