关于判断函数timestamp是否为纯函数的技术问询
Is the
timestamp Function a Pure Function? 你完全正确——这个timestamp函数不是纯函数,你的判断精准命中了纯函数的核心要求。
先明确下纯函数的核心定义(你提到的“给定相同输入,始终返回相同输出”是最关键的一点,通常还会补充“无任何可观察副作用”):
- 具备引用透明性:相同的输入,无论调用多少次、在什么时间/场景下调用,返回结果必须完全一致。
- 不会产生可观察的副作用(比如修改外部变量、发起网络请求、读写文件等)。
咱们具体拆解你的代码:
def timestamp(key: String) : String = Monoid.combine(key, Instant.now().getEpochSecond.toString)
问题就出在Instant.now().getEpochSecond这个调用上——它依赖的是系统的当前时间,这是一个随时间不断变化的外部可变状态。哪怕你传入完全相同的key参数,每次调用timestamp时,Instant.now()都会返回不同的时间戳,最终拼接出来的字符串自然也不一样。
举个实际的例子:假设你现在调用timestamp("order_123")得到"order_1231701234567",过10秒再调用同一个输入,得到的就会是"order_1231701234577",结果完全不同。这直接违反了纯函数“相同输入必返回相同输出”的核心规则。
所以你的结论完全正确:这个函数因为依赖了可变的外部状态(系统时间),无法保证输入输出的确定性,因此不是纯函数。
内容的提问来源于stack exchange,提问作者softshipper
相关产品推荐
相关产品推荐

