Haskell 中没有参数的匿名函数
Anonymous function without parameter in Haskell
我可以在 Haskell 中定义一个不带参数的匿名函数吗?
我有一段代码在几个分支中重复出现。这些代码引用了外部的几个值。
目的 0:定义一个函数来完成代码块中的工作。
目的 1:不要重复 codeBlock 两次。
目的 2:不要将 d1..d4 传递给函数。更好地避免传递文件和时间。
f event d1 d2 d3 d4 =
case event of
(Modified file time) -> do
codeBlock file time d1 d2 d3 d4
(Added file time) -> do
codeBlock file time d1 d2 d3 d44
_ -> return ()
不存在不带参数(匿名或其他)的函数。那只是一个 value(在 Haskell 中,actions 就像 main :: IO ()
也只是值)。
当然,值可以在任何地方定义(比如函数);但是,如果您想在多个地方重复使用它,您应该 而不是 使其匿名,但给它一个(局部范围的)名称:
f event d1 d2 d3 d4 =
case event of
(Modified file time) -> do
defaultAction time
(Added file time) -> do
defaultAction time
_ -> return ()
where defaultAction time = do
codeBlock file time d1 d2 d3 d4
顺便说一句,只有一个语句的 do
块 equivalent 只是那个语句,即你也可以写
f event d1 d2 d3 d4 =
case event of
(Modified file time) -> defaultAction time
(Added file time) -> defaultAction time
_ -> return ()
where defaultAction time = codeBlock file time d1 d2 d3 d4
我可以在 Haskell 中定义一个不带参数的匿名函数吗?
我有一段代码在几个分支中重复出现。这些代码引用了外部的几个值。
目的 0:定义一个函数来完成代码块中的工作。
目的 1:不要重复 codeBlock 两次。
目的 2:不要将 d1..d4 传递给函数。更好地避免传递文件和时间。
f event d1 d2 d3 d4 =
case event of
(Modified file time) -> do
codeBlock file time d1 d2 d3 d4
(Added file time) -> do
codeBlock file time d1 d2 d3 d44
_ -> return ()
不存在不带参数(匿名或其他)的函数。那只是一个 value(在 Haskell 中,actions 就像 main :: IO ()
也只是值)。
当然,值可以在任何地方定义(比如函数);但是,如果您想在多个地方重复使用它,您应该 而不是 使其匿名,但给它一个(局部范围的)名称:
f event d1 d2 d3 d4 =
case event of
(Modified file time) -> do
defaultAction time
(Added file time) -> do
defaultAction time
_ -> return ()
where defaultAction time = do
codeBlock file time d1 d2 d3 d4
顺便说一句,只有一个语句的 do
块 equivalent 只是那个语句,即你也可以写
f event d1 d2 d3 d4 =
case event of
(Modified file time) -> defaultAction time
(Added file time) -> defaultAction time
_ -> return ()
where defaultAction time = codeBlock file time d1 d2 d3 d4