0

TL;DR - 哪些方法/属性/功能可用于不可变数组[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

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

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

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

4

1 回答 1

1

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

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

当谈到 Array 的内置方法时,有:

方法 不可变数组 可变数组
尺寸 ✅</td> ✅</td>
得到 ✅</td> ✅</td>
钥匙 ✅</td> ✅</td>
瓦尔斯 ✅</td> ✅</td>
✅</td> ❌</td>

如果您有更多兴趣,可以在这里找到一些信息: 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);
  };
};
``
于 2022-02-23T19:50:58.127 回答