有没有办法(可能是一些编译指示或扩展(我使用 GHC ))允许分别声明不同的函数模式?
例如,我可以这样做:
fun1 1 = "1"
fun1 2 = "a"
fun1 3 = "4"
fun1 4 = "3"
但我不能这样做:
fun1 1 = "1"
fun1 2 = "a"
fun1 3 = "4"
a = 3 -- Just some code here.
fun1 4 = "3"
我。即我需要一些东西来消除这种限制。
我需要在某种“游戏”中使用它,之前的代码无法进行编辑。
提前谢谢!
答案 0 :(得分:4)
据我所知,这是不可能的。像这样的多个定义只是case
上的语法糖,因此不是非常强大的句法抽象。这通常不是必需的。
使用haskell-src
package解析Haskell代码并构建游戏的增量界面可能会很幸运。
答案 1 :(得分:2)
我不禁感到如果允许的话,民间会编写相当混乱的代码。
除非有一个重要的结构性原因,否则最好坚持使用通常的有效语法 - 如果定义都集中在一个地方,则更容易理解。
然而,也许最好以不同的方式构建它以实现您想要的目标:
您可以使用Data.Map在代码的不同部分构建多个子图,然后在适当的阶段将它们粘合在一起。
您可以将这些定义保存在一个或多个配置文件中,并在游戏初始化时读取它们。您的用户可能希望以这种方式轻松编辑游戏。
您可以以更加适合Haskell的方式存储数据
你可以使用快速的binary包来序列化它,并在运行时读取它。
您可以使用Yesod的后端不可知Persistent
此处有太多其他选项
您可以使用联合类型(如Either
)作为fun1
的输入,然后分发有关代码的定义,但编写一个检查输入和标签的统一函数它根据类别。
如果不知道你想要做什么,很难知道什么是最好的,但是放松sytnax规则并不是一个好的进步。