【发布时间】:2014-02-18 18:43:19
【问题描述】:
请原谅我的新手问题和可能不正确的术语。
Clojure 向量函数产生不包括停止值的值。例如:
=> (subvec [:peanut :butter :and :jelly] 1 3)
[:butter :and]
=> (range 1 5)
(1 2 3 4)
范围的文档明确说明了这一点,但没有给出合理的解释:“...返回一个从开始(包括)到结束(不包括)的惰性 nums 序列......”。
在 Ruby 中,这些操作是包容性的:
(1..5).to_a => [1, 2, 3, 4, 5] [:花生,:黄油,:和,:果冻] [1,3] => [:butter, :and, :jelly]
显然这些是非常不同的语言,但我想知道除了语言设计者的个人偏好之外,是否还有一些潜在的原因?
【问题讨论】:
-
这里没什么好回答的。 Clojure 使用独占结束索引,Ruby 使用包容性。支持他们两人保持一致。无论哪种方式,排他性与包容性都没什么好争论的。您可能会争辩说,包容性更“直观”,但这取决于您在与谁交谈。
-
在 Ruby 中,
1..5包含 5,但1...5不包含。 Ruby 是双向的。