reasonml - 数组或元组列表

时间:2017-06-06 16:52:50

标签: types ocaml reason

我有元组type foo = (string, string);

  1. 如何创建foo元组的类型数组?

  2. 使用元组数组或元组列表有什么区别?

  3. 如何访问元组值数组? JS模拟:

    const foo1 = [1, 2];
    const foo2 = [3, 4];
    const arrayOfFoo =[foo1, foo2];
    
    console.log(arrayOfFoo[0][0]) // 1
    console.log(arrayOfFoo[1][1]) // 4
    
  4. 更新:我找到了优秀的gitbook

    https://kennetpostigo.gitbooks.io/an-introduction-to-reason/content/

    /* create tuple type*/
    type t = (int, int);
    
    /* create array of tuples */
    type arrayOfT = array t;
    
    /* create array of tuples */
    type listOfT = list t;
    
    /* create list of tuples value */
    let values: listOfT = [(0, 1), (2, 3)];
    
    /* get first tuple  */
    let firstTyple: t = List.nth values 0;
    
    /* get first tuple values  */
    let (f, s) = firstTyple;
    

    这是对的吗?有没有更有用的方法呢?

1 个答案:

答案 0 :(得分:4)

  1. let x: list (int, int) = [(1,2), (3,4)] /* etc */
  2. 2

    • Array固定长度&可变,并提供简单的随机访问。它与JavaScript列表非常相似。将它用于需要随机访问(读/写)的内容远远超过追加/弹出。
    • List是一个单链表&是不可改变的。来自功能传统的人们会很熟悉。将它用于访问第一个元素或从正面推送/弹出比随机访问更常见的事情。

    在实践中,我使用List几乎所有东西,但是对于一些性能密集的情况使用Array。

    3

    从列表中获取第一件事是非常常见的。通常,你想要先做第一件事,然后用"休息"做一些事情。的清单。要彻底,您还需要处理列表为空的情况。这是什么样的:

    switch (somelist) {
      | [] => Js.log "nothing there" /* what we do if the list is empty */
      | [firstItem, ...rest] => Js.log firstItem /* we have things! */
    }
    

    如果你只是想得到第一个项目,并且你的程序崩溃,如果它是空的,那么你可以List.hd mylist

    从元组中获取项目就像放置let (a, b) = sometuple一样。如果你只关心第一个,你可以let (a, _) = sometuple_是一个特殊的占位符,意味着"我不在乎这是什么")。对于长度为2的元组,有一些特殊的辅助函数fstsnd,它们可以为您提供第一和第二项。