我可以在记录内容上进行模式匹配时得到记录吗?

问题描述 投票:1回答:1

[基本上,我想对记录的内容进行模式匹配,然后返回所述记录的修改。所以我经常遇到这种情况:

updateChr :: Database -> Database -> Database
updateChr db Database{mode=1, characters=chr} = db{characters=(map someFunc chr)}
updateChr db Database{mode=2, characters=chr} = db{characters=(map someOtherFunc chr)}

其中两个数据库参数应始终为同一记录。我可以只通过一次记录就可以做到这一点吗?

haskell record
1个回答
8
投票

您可以使用as pattern [Haskell-report]

updateChr :: Database -> Database
updateChr db@Database{mode=1, characters=chr} = db {characters=(map someFunc chr)}
updateChr db@Database{mode=2, characters=chr} = db {characters=(map someOtherFunc chr)}

但是,如果您始终想映射characters,则可以在此处使用防护装置:

updateChr :: Database -> Database
updateChr db@Database{mode=m, characters=chr} = db {characters=map f chr}
    where f | m == 1 = someFunction
            | otherwise = someOtherFunction
© www.soinside.com 2019 - 2024. All rights reserved.