当前位置: 首页 > news >正文

Norm高级用法:使用selection/2轻松实现数据字段的可选与必选控制

Norm高级用法:使用selection/2轻松实现数据字段的可选与必选控制

【免费下载链接】normData specification and generation项目地址: https://gitcode.com/gh_mirrors/no/norm

Norm是一个强大的数据规范与生成工具,而selection/2函数则是其核心功能之一,它能帮助开发者轻松实现数据字段的可选与必选控制。本文将详细介绍selection/2的高级用法,让你快速掌握这一实用功能。

什么是selection/2?

selection/2是Norm框架中用于定义数据选择规则的函数,它允许你从已有的数据模式(schema)中精确选择需要的字段,并控制这些字段的必选性。通过使用selection/2,你可以灵活地定制数据结构,满足不同场景下的数据验证需求。

selection/2的基本用法

简单字段选择

selection/2最基本的用法是从一个schema中选择特定的字段。例如,假设我们有一个用户schema,包含nameageemail字段,我们可以使用selection/2只选择age字段:

assert @input == conform!(@input, selection(user_schema(), [:age]))

你也可以同时选择多个字段:

assert @input == conform!(@input, selection(user_schema(), [:age, :name]))

字段必选性控制

当使用selection/2选择字段时,这些字段会被自动设为必选。如果输入数据中缺少选中的字段,Norm会返回错误信息。例如:

assert {:error, errors} = conform(%{user: %{name: "chris"}}, selection) assert errors == [%{spec: ":required", input: %{name: "chris"}, path: [:user, :age]}]

selection/2的高级用法

嵌套schema选择

selection/2不仅支持简单的字段选择,还可以处理嵌套的schema结构。例如,如果我们有一个包含用户信息的嵌套schema,我们可以使用selection/2深入到嵌套结构中选择字段:

schema = schema(%{user: user_schema()}) selection = selection(schema, user: [:age]) assert %{user: %{age: 31}} == conform!(%{user: %{age: 31}}, selection)

结合schema验证

selection/2选择的字段会继承原schema中的验证规则。这意味着,如果原schema对某个字段有特定的验证要求,那么在selection/2中选择该字段后,输入数据仍需满足这些验证要求。例如:

assert {:error, errors} = conform(%{age: -100}, selection(user_schema(), [:age])) assert errors == [%{spec: "&(&1 > 0)", input: -100, path: [:age]}]

selection/2的实现原理

selection/2的实现位于lib/norm/core/selection.ex文件中。它通过构建一个选择器结构,记录需要选择的字段及其必选性。核心代码如下:

defstruct required: [], schema: nil def new(schema, selectors) do case selectors do :all -> selectors = build_all_selectors(schema) select(selectors, schema) _ -> validate_selectors!(selectors) select(selectors, schema) end end

selection/2函数首先会验证选择器的合法性,然后根据选择器从schema中选择字段,并构建一个包含选中字段和原schema的选择结构。在数据验证时,Norm会根据这个选择结构来检查输入数据是否满足要求。

总结

selection/2是Norm框架中一个非常实用的函数,它可以帮助开发者轻松实现数据字段的可选与必选控制。通过本文的介绍,你应该已经掌握了selection/2的基本用法和高级技巧。如果你想深入了解selection/2的更多细节,可以查看lib/norm/core/selection.ex文件的源代码,或者参考test/norm/core/selection_test.exs中的测试用例。

希望本文能够帮助你更好地使用Norm框架,提升数据验证的效率和准确性!

【免费下载链接】normData specification and generation项目地址: https://gitcode.com/gh_mirrors/no/norm

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

http://www.jsqmd.com/news/1302473/

相关文章:

  • 花都区粤菜餐厅哪家味道好?:【锦堂春想】唇齿留香 - 17728181569
  • 限行天气联动 API 常见错误与排错指南:从 400 到 500 的异常处理
  • 音频识别转文字免费版额度够日常使用吗2026实测多款工具告诉你答案
  • 2026欧美绷带裙ODM选厂痛点深度解析 绷带裤绷带连衣裙靠谱合作厂家指南 - 甄选测评馆
  • 白番茄光感透肌面膜哪家靠谱:【蜜妙诗】正品正宗 - 17728181569
  • webtrees协作功能详解:多人共同编辑家谱的最佳实践
  • 2026年7月配音网站实测:8款TTS工具生成速度/音质/字幕准确率大比拼
  • ZenlessZoneZero-OneDragon:绝区零全自动游戏体验终极解决方案
  • GEO策略:哪些动作值得加码,哪些操作应当立即叫停?
  • BilibiliDown音频提取终极指南:从B站视频中提取高质量音乐的3种方法
  • 提升视频生成质量:LTX-2.3 Motion Enhancer-n4w的10个专业提示
  • 抖音内容高效管理方案:douyin-downloader全面解析与实战指南
  • 靶向肝实质/非实质细胞的AAV血清型与启动子“组合拳”全攻略
  • 远程控制软件哪个好用 远程控制软件推荐无界趣连2.0
  • 如何高效使用Ryujinx模拟器:完整实用指南让你在PC上畅玩Switch游戏
  • 【锦堂春想】绝佳口碑 - 17328623207
  • Mage2Gen核心功能揭秘:从控制器到插件的10大实用Snippet
  • 花都区粤菜餐厅哪家性价比高?:【锦堂春想】划算省心 - 18102756859
  • 2026年国内专业的热处理炉温跟踪仪厂家联系电话 - 品牌排行榜
  • 双目相机、SLAM、极线几何与相机标定总结
  • 3步掌握KeymouseGo:免费开源鼠标键盘录制自动化终极指南
  • GLM 5.2 Token经济体系解析:从512K上下文到成本优化策略
  • 31号总结
  • 2026 年新消息:龙口诚信的路面混凝土切割公司选哪家,老小区修路花2万,老师傅偷偷用这法子省了大半成本?-盛达水钻切割 - 行业甄选官
  • 2026年mp3转文本工具实测对比有音频转写需求的用户该怎么选,差距竟然这么大
  • QuantConnect量化研究入门:从数据获取到回测的完整Python教程
  • 决策矩阵:结构化决策工具在技术选型与项目评审中的应用
  • 如何用Ansible快速部署GitLab?Ansible Role - GitLab的5分钟上手教程
  • PO与MO文件处理指南:Gettext加载器(Loader)与生成器(Generator)实战
  • Koop输出格式扩展:除了GeoJSON,你还能使用这些格式