匹配数组和函数语法

时间:2009-04-08 21:46:03

标签: arrays programming-languages syntax function

因此,从黑盒的角度来看,数组和函数背后的想法非常相似。传入输入值并检索输出值。那么保持数组语法和函数语法相同还是更好有差异呢?

e.g。

  

print array [0]

     

print func(0)

  

print array(0)

     

print func(0)

4 个答案:

答案 0 :(得分:1)

从技术上讲,你是对的,它们都是映射,但在大多数程序员的脑海中都存在差异:数组存储它们的值,而函数计算它们的值。换句话说,(简单地)阵列针对速度进行了优化,并且针对存储器优化了功能。我认为维持这是一个很好的区别。

答案 1 :(得分:0)

Ruby做了一些混淆 - 方法使用(),但是数组,哈希和lambda表达式(ruby必须最接近函数)都可以使用[]。与ducktyping一起,这意味着你可以传递一个对象,并使用[]来传递它,而不是关心它是否是预先计算的(一个数组),每次计算(一个lambda表达式),或者根据需要计算并缓存(可以使用哈希)。

另一个将两者混为一谈的例子是Haskell。我记得它没有内置到languange中的数组语法 - 访问数组索引是一个函数调用,可以像任何其他函数一样使用。

我实际上更喜欢混淆 - 它允许更容易的灵活性(我喜欢)。知道你是在优化速度还是记忆(就像大卫所说的那样)是很好的,但是我愿意把这个责任放在自己身上,而不是把它留给语言中的线索。

答案 2 :(得分:0)

嗯,我认为传统上,这来自C / Algol语法,其中[]直接转换为内存偏移,而()是一个更复杂的过程。

在一些较新的语言中,[]是原始数据结构的通用索引,例如,J中的哈希通过以下方式访问:

hash["Hello"];
array[0];

我认为保持“索引”语法与“参数”语法不同是有用的。

答案 3 :(得分:0)

你是对的。数组,地图和字典以及甚至对象本质上都是数学意义上的函数。事实上,有些语言将数组视为整数函数,将地图和字典视为其键的功能,将对象视为其插槽的功能。其中两种语言是ScalaClojure