因此,从黑盒的角度来看,数组和函数背后的想法非常相似。传入输入值并检索输出值。那么保持数组语法和函数语法相同还是更好有差异呢?
e.g。
print array [0]
print func(0)
与
print array(0)
print func(0)
答案 0 :(得分:1)
从技术上讲,你是对的,它们都是映射,但在大多数程序员的脑海中都存在差异:数组存储它们的值,而函数计算它们的值。换句话说,(简单地)阵列针对速度进行了优化,并且针对存储器优化了功能。我认为维持这是一个很好的区别。
答案 1 :(得分:0)
Ruby做了一些混淆 - 方法使用()
,但是数组,哈希和lambda表达式(ruby必须最接近函数)都可以使用[]
。与ducktyping一起,这意味着你可以传递一个对象,并使用[]
来传递它,而不是关心它是否是预先计算的(一个数组),每次计算(一个lambda表达式),或者根据需要计算并缓存(可以使用哈希)。
另一个将两者混为一谈的例子是Haskell。我记得它没有内置到languange中的数组语法 - 访问数组索引是一个函数调用,可以像任何其他函数一样使用。
我实际上更喜欢混淆 - 它允许更容易的灵活性(我喜欢)。知道你是在优化速度还是记忆(就像大卫所说的那样)是很好的,但是我愿意把这个责任放在自己身上,而不是把它留给语言中的线索。
答案 2 :(得分:0)
嗯,我认为传统上,这来自C / Algol语法,其中[]直接转换为内存偏移,而()是一个更复杂的过程。
在一些较新的语言中,[]是原始数据结构的通用索引,例如,J中的哈希通过以下方式访问:
hash["Hello"];
array[0];
我认为保持“索引”语法与“参数”语法不同是有用的。
答案 3 :(得分:0)