comparison 教程

本教程通过取自 src 中文档注释和测试的示例介绍这两个区间辅助函数。与 array_utils 教程一样,示例在包内运行;在其他包中,请以 @luna-utils.clamp 和 @luna-utils.is_between 的形式调用。

将值限制在区间内

clamp 把值移入区间;若值已在区间内,则保持不变:

inspect(clamp(5, 1, 10), content="5")
inspect(clamp(-3, 1, 10), content="1")
inspect(clamp(15, 1, 10), content="10")

任何实现了 Compare 的类型都可以使用,例如按字典序比较的字符串:

assert_true(clamp("abc", "def", "ghi") == "def")
assert_true(clamp("xxx", "def", "ghi") == "ghi")

判断是否属于区间

is_between 判断值是否位于区间内;两个边界都包含在内:

inspect(is_between(5, 1, 10), content="true")
inspect(is_between(10, 1, 10), content="true")
inspect(is_between(0, 1, 10), content="false")

后续阅读

两个函数都不检查 min <= max;请按这个顺序传入边界。API 参考说明了边界颠倒时的结果,设计说明列出了两个函数共同遵循的约定。