Motoko 不可变数组类型定义

Motoko Immutable Array Type Definition

TL;DR - 哪些 methods/properties/functionalities 可用于不可变数组 [T](或任何内置类型)?


长版

我一直在寻找围绕内置类型(例如数组)的基本功能 [T],但运气不佳。我可以找到有关基本库辅助方法和更高级别类型的信息,但找不到我找不到的基本数组信息。

查看 smartcontracts.org 上的文档,我可以找到关于它们的非常基本的信息。如:

https://smartcontracts.org/docs/language-guide/mutable-state.html#immutable-arrays https://smartcontracts.org/docs/language-guide/language-manual.html#exp-arrays

我需要找到数组的长度以及 appending/modifying 数组的最佳方法是什么。 mo:base/Array 中有些东西,但对所有内置功能感到好奇,如果有的话。

https://github.com/dfinity/motoko-base/blob/master/src/Array.mo

我唯一的猜测是 [T] 是一个 Iter<T> = { next : () -> ?T } 并且它使用 Iter<T>.size()。如果是这样,那么 [T] 将需要一个 next : () -> ?T 方法,但我找不到它的定义位置。

对于基本功能和类型,您需要查看 motoko 实现 (https://github.com/dfinity/motoko)。

如果您对 motoko 类型感兴趣,可以在这里找到它:https://github.com/dfinity/motoko/blob/master/src/mo_types/type.ml

Array 的内置方法有:

method Immutable array Mutable Array
size
get
keys
vals
put

如果您更感兴趣,可以在这里找到一些信息: https://github.com/dfinity/motoko/blob/master/src/mo_interpreter/interpret.ml(第 (* Overloaded dot implementations *) 节)

这里:https://github.com/dfinity/motoko/blob/master/src/prelude/internals.mo


使用一些内置方法的脚本示例。

actor ArrayLen {
  let my_array : [var Nat] = [var 1, 3];
  
  public query func my_array_size() : async Nat {
    return my_array.size();
  };

  public func change_last_value(n : Nat) :  async Bool {
    my_array.put(my_array.size()-1 , n);
    return true;
  };

  public func get_last_value() :  async Nat {
    return my_array.get(my_array.size()-1);
  };
};
``