【问题标题】:Matching Array and Function Syntax匹配数组和函数语法
【发布时间】:2010-10-18 10:26:58
【问题描述】:

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

例如

打印数组[0]

打印函数(0)

打印数组(0)

打印函数(0)

【问题讨论】:

  • 显然是编程语言设计中的一个主观主题...

标签: arrays programming-languages syntax function


【解决方案1】:

你完全正确。数组,还有地图和字典,甚至可以说是对象,本质上都是数学意义上的函数。事实上,有些语言将数组视为整数的函数,将映射和字典视为其键的函数,将对象视为其槽的函数。其中两种语言是ScalaClojure

【讨论】:

    【解决方案2】:

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

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

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

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

    【讨论】:

    • 你认为它为什么有用?或者,如果您愿意,它有什么用处?
    【解决方案3】:

    Ruby 做了一些合并 - 方法使用 (),但数组、哈希和 lambda 表达式(最接近 ruby​​ 的函数)都可以使用 []。与ducktyping一起,这意味着您可以传递一个对象,并使用[]传递它的值,而不关心它是预先计算的(一个数组),每次计算(一个lambda表达式),还是根据需要计算和缓存(可以是用哈希完成)。

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

    我实际上更喜欢合并 - 它允许更轻松的灵活性(我喜欢)。知道你是在优化速度还是内存(就像 David 说的那样)很高兴知道,但我愿意自己承担这个责任,而不是将其留给语言内置的提示。

    【讨论】:

      【解决方案4】:

      从技术上讲,您是对的,它们都是映射,但在大多数程序员的心目中存在区别:数组存储它们的值,而函数计算它们的值。换句话说,(简单地说)数组针对速度进行了优化,函数针对内存进行了优化。我认为这是一个很好的区别。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-12-22
        • 2019-02-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-04-09
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多