【发布时间】:2010-10-18 10:26:58
【问题描述】:
因此,从黑盒的角度来看,数组和函数背后的想法非常相似。您传入输入值并检索输出值。那么数组语法和函数语法是保持一致还是有区别更好呢?
例如
打印数组[0]
打印函数(0)
对
打印数组(0)
打印函数(0)
【问题讨论】:
-
显然是编程语言设计中的一个主观主题...
标签: arrays programming-languages syntax function
因此,从黑盒的角度来看,数组和函数背后的想法非常相似。您传入输入值并检索输出值。那么数组语法和函数语法是保持一致还是有区别更好呢?
例如
打印数组[0]
打印函数(0)
对
打印数组(0)
打印函数(0)
【问题讨论】:
标签: arrays programming-languages syntax function
嗯,我认为传统上,这来自 C/Algol 语法,其中 [] 直接转换为内存偏移量,而 () 是一个更复杂的过程。
在一些较新的语言中,[] 是原始数据结构的通用索引,例如,Js 中的哈希通过以下方式访问:
hash["Hello"];
array[0];
我认为保持“索引”语法与“参数”语法不同是有用的。
【讨论】:
Ruby 做了一些合并 - 方法使用 (),但数组、哈希和 lambda 表达式(最接近 ruby 的函数)都可以使用 []。与ducktyping一起,这意味着您可以传递一个对象,并使用[]传递它的值,而不关心它是预先计算的(一个数组),每次计算(一个lambda表达式),还是根据需要计算和缓存(可以是用哈希完成)。
将两者混为一谈的另一个例子是 Haskell。我记得它没有内置到语言中的数组语法 - 访问数组索引是一个函数调用,可以像任何其他函数一样使用。
我实际上更喜欢合并 - 它允许更轻松的灵活性(我喜欢)。知道你是在优化速度还是内存(就像 David 说的那样)很高兴知道,但我愿意自己承担这个责任,而不是将其留给语言内置的提示。
【讨论】:
从技术上讲,您是对的,它们都是映射,但在大多数程序员的心目中存在区别:数组存储它们的值,而函数计算它们的值。换句话说,(简单地说)数组针对速度进行了优化,函数针对内存进行了优化。我认为这是一个很好的区别。
【讨论】: