我可以在Haskell中定义一个没有参数的匿名函数吗?
我在几个分支中重复了一段代码。这些代码引用了外面的几个值。
目的0:定义一个函数在codeBlock中完成工作。
目的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 ()
答案 0 :(得分:4)
没有参数(匿名或其他)的功能。这只是值(在Haskell中,操作,如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
只有一个语句的BTW,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