如何在PureScript中部分更新Record(记录)
在PureScript中更新Record的部分字段
嘿,作为PureScript初学者碰到记录更新的问题太正常啦!你想要实现类似TypeScript里{...a, height: 180}的部分字段更新,PureScript其实有非常直观的语法支持,而且还自带类型安全检查。
最常用的记录更新语法
PureScript内置了记录更新语法,写法比TS的扩展运算符更简洁,直接在原记录后面跟上要更新的字段即可:
-- 先复用你定义的Employee类型 type Employee = { firstName :: String, lastName :: String, address :: String, height :: Number, weight :: Number } -- 假设你已有一个Employee实例 a :: Employee a = { firstName: "Alice", lastName: "Smith", address: "456 Oak Ave", height: 165, weight: 55 } -- 仅更新height字段,和你要的TS效果完全一致 updatedA :: Employee updatedA = a { height = 180 }
这个语法会自动保留原记录的所有其他字段,只替换你指定的字段值,而且编译器会严格检查你更新的字段是否属于Employee类型——如果不小心把height写成heigth,会直接报错,避免拼写错误。
更新多个字段的情况
如果需要同时更新多个字段,只需要在大括号里添加更多字段即可:
-- 同时更新height和weight updatedA2 :: Employee updatedA2 = a { height = 180, weight = 60 }
可选:使用Record模块的底层函数
如果你需要更动态的更新(比如字段名是动态生成的),可以使用Data.Record模块里的update函数,但这种场景在日常开发中比较少见,还是上面的语法糖更常用:
import Data.Record (update) updatedA3 :: Employee updatedA3 = update "height" (const 180) a
怎么样,是不是很简单?PureScript的记录更新语法既简洁又安全,完全能满足你部分字段更新的需求~
内容的提问来源于stack exchange,提问作者Niko Modric
相关产品推荐
相关产品推荐

