修改程序源码
为了充分理解本章节的内容,可以修改源码来尝试不同的结果。例如,可以修改location函数返回多个城市名称。
修改代码实验步骤
打开dfx.json配置文件,修改默认的location_hello设置为favorite_cities
这个步骤中,canister名称和主程序路径都要使用favorite_cities
保存并关闭dfx.json文件
运行下面的命令复制location_hello源文件目录来匹配dfx.json配置文件
cp -r src/location_hello src/favorite_cities
打开src/favorite_cities/main.mo文件
复制粘贴下面的代码用2个新函数替换location函数
actor { public func location(cities : [Text]) : async Text { return "Hello, from " # (debug_show cities) # "!"; }; public func location_pretty(cities : [Text]) : async Text { var str = "Hello from "; for (city in cities.vals()) { str := str # city #", "; }; return str # "bon voyage!"; } };
注意代码中的Text被中括号包裹。在这里,Text代表UTF-8字符集。被中括号包裹的类型表示这是该类型的数组。在这里,[Text]代表UTF-8字符集类型的数组,允许程序接收并返回多个字符串。
对array使用apply操作的示例代码如下
public func apply<A, B>(fs : [A -> B], xs : [A]) : [B] { var ys : [B] = []; for (f in fs.vals()) { ys := append<B>(ys, map<A, B>(f, xs)); }; ys; };
想了解更多关于数组相关操作的内容,请查看Moto编程语言参考中的数组模块。在快速开始的示例部分也有数组使用的示例。
运行下面的命令注册构建并部署应用
dfx deploy
运行下面的命令调用location方法并使用Candid接口描述规则传递city参数
dfx canister call favorite_cities location '(vec {"San Francisco";"Paris";"Rome"})'
命令使用Candid接口描述规则(vec { val1; val2; val3; }) 来返回一组值。需要更多关于Candid接口描述语言的信息,请查看Candid语言章节。
命令输出示例:
("Hello, from ["San Francisco", "Paris", "Rome"]!")
运行下面的命令调用location_pretty方法并使用Candid接口描述规则传递city参数
dfx canister call favorite_cities location_pretty '(vec {"San Francisco";"Paris";"Rome"})'
命令输出:
("Hello from San Francisco, Paris, Rome, bon voyage!")
最后更新于
这有帮助吗?