我可以在对其内容进行模式匹配时获得记录吗?
Can i get a record while pattern matching on its contents?
基本上,我想对记录的内容进行模式匹配,然后 return 对所述记录进行修改。所以我经常遇到这种情况:
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)}
两个数据库参数应该始终是同一条记录。有什么方法可以只通过一次记录吗?
您可以使用 as pattern [Haskell-report]:
updateChr :: Database -> Database
updateChr <b>db@</b>Database{mode=1, characters=chr} = db {characters=(map someFunc chr)}
updateChr <b>db@</b>Database{mode=2, characters=chr} = db {characters=(map someOtherFunc chr)}
如果你总是想映射 characters
,你可以在这里使用守卫:
updateChr :: Database -> Database
updateChr db@Database{mode=m, characters=chr} = db {characters=map <b>f</b> chr}
where f | m == 1 = someFunction
| otherwise = someOtherFunction
基本上,我想对记录的内容进行模式匹配,然后 return 对所述记录进行修改。所以我经常遇到这种情况:
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)}
两个数据库参数应该始终是同一条记录。有什么方法可以只通过一次记录吗?
您可以使用 as pattern [Haskell-report]:
updateChr :: Database -> Database
updateChr <b>db@</b>Database{mode=1, characters=chr} = db {characters=(map someFunc chr)}
updateChr <b>db@</b>Database{mode=2, characters=chr} = db {characters=(map someOtherFunc chr)}
如果你总是想映射 characters
,你可以在这里使用守卫:
updateChr :: Database -> Database
updateChr db@Database{mode=m, characters=chr} = db {characters=map <b>f</b> chr}
where f | m == 1 = someFunction
| otherwise = someOtherFunction