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);
};
};
``
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);
};
};
``