DFINITY - Motoko学习系列 - simple-to-do example分析

源代码

// Import standard libraries
import Array "mo:base/Array";
import Nat "mo:base/Nat";

// Import the 'ToDo' type definition
import Types "Types";

module Utils {

  type ToDo = Types.ToDo;

  // Add to-do item utility
  public func add(todos : [ToDo], desc : Text, nextId : Nat) : [ToDo] {
    let todo : ToDo = {
      id = nextId;
      description = desc;
      completed = false;
    };
    Array.append<ToDo>([todo], todos)
  };

  // Complete to-do item utility
  public func complete(todos : [ToDo], id : Nat) : [ToDo] {
    Array.map<ToDo,ToDo>(todos, func (todo : ToDo) : ToDo {
      if (todo.id == id) {
        return {
          id = todo.id;
          description = todo.description;
          completed = true;
        };
      };
      todo
    })
  };

  // Show to-do item utility
  public func show(todos : [ToDo]) : Text {
    var output : Text = "\n___TO-DOs___";
    for (todo : ToDo in todos.vals()) {
      output #= "\n(" # Nat.toText(todo.id) # ") " # todo.description;
      if (todo.completed) { output #= " ✔"; };
    };
    output
  };

  // Clear to-do item utility
  public func clear(todos: [ToDo]) : [ToDo] {
    var updated : [ToDo] = [];
    for (todo : ToDo in todos.vals()) {
      if (not todo.completed) {
        updated := Array.append<ToDo>(updated, [todo]);
      };
    };
    updated
  };
};

分析

type 重命名 : type ToDo = Types.ToDo; 
声明数组 : var todos : [ToDo] = [];
数组赋值 : todos := Utils.add(todos, description, nextId);
引用类:
actor Assistant {//body}
module Types {//body}
module Utils{//body}

关于return:
public func complete(todos : [ToDo], id : Nat) : [ToDo] {
    Array.map<ToDo,ToDo>(todos, func (todo : ToDo) : ToDo {
      if (todo.id == id) {
        return {
          id = todo.id;
          description = todo.description;
          completed = true;
        };
      };
      todo
    })
  };
注意, 在return的地方,可以return { //code }

var output : Text = "\n___TO-DOs___";
在这里,可以用上转义符:\n

for (todo : ToDo in todos.vals()) {
  output #= "\n(" # Nat.toText(todo.id) # ") " # todo.description;
  if (todo.completed) { output #= " ✔"; };
};
"#" 用于string连接, 可以用 #= 连接字符串 
for ··· in ···  ->  for (todo : ToDo in todos.vals())
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值