【发布时间】:2020-03-28 20:49:43
【问题描述】:
h = {a: "foo"}
h.fetch(:a, h.fetch(:b))
收益key not found: :b
即使找到键,Ruby 也会评估默认值,这似乎很奇怪?有没有办法解决这个问题?
编辑: 显然,这种行为属于惰性与急切评估的范式。几乎所有命令式语言都使用急切求值,而许多函数式语言使用惰性求值。然而,某些语言,例如 Python(上周之前是我知道的唯一语言),对某些操作具有惰性求值能力。
【问题讨论】:
-
在大多数语言中,函数参数不会被延迟计算。
-
@CollinD:该答案不适用/重复。如果
fetch不接受块/进程,则不能将其更改为这样做。 -
我觉得你觉得很奇怪很奇怪,因为 Ruby 中的所有方法都是这样,事实上所有主流语言都是这样。你的第一语言是什么?哈斯克尔?
-
Python 不会那样做,至少 dict 的 get 方法不会。
标签: ruby