【CryptZombies】レッスン2チャプター12:複数の返り値の処理
複数の返り値の処理
複数の値を返す例
function multipleReturns() internal returns(uint a, uint b, uint c) {
return (1, 2, 3);
}
function processMultipleReturns() external {
// 例として、まずa,b,cという名前のuint関数を宣言
uint a;
uint b;
uint c;
// これが複数に割り当てる方法だ:
(a, b, c) = multipleReturns();
}
// そのうちの一つの値だけ欲しければ、こうすれば良い:
function getLastReturnValue() external {
uint c;
// 他のフィールドは空欄でも構わないぞ:
(,,c) = multipleReturns();
}
テストの実行
①feedOnKittyという名前の関数を作成せよ。そこに_zombieIdと_kittyIdというどちらもuintのパラメータを設定せよ。また関数はpublicを使用せよ。
②その関数の中で、まず最初にkittyDnaというuintの関数を宣言せよ。
③次に、_kittyIdで、kittyContract.getKitty関数を呼び出し、kittyDnaにgenesを格納せよ。一つ注意がある。getKittyを使うと、大量の変数が返ることになる(正確には10個だ。)欲しいのは最後のgenesだけだ。カンマの数に気を付けるのだぞ!
まず、赤線から見ていきます。
チャプター11で初期化したkittyContractという名前のKittyInterface。
このkittyContractプロパティにアクセスしてgetKitty関数を呼び出します。
getKitty関数の引数は_id(uint)なので、_kittyIdを渡します。
次に青線を見ていきます。
getKitty関数の戻り値は10個ありますが、欲しいのは10個目のgenesだけなので、次のようになります。
④最後に、feedAndMultiplyを呼び出し、_zombieIdとkittyDnaの両方を渡すのだ。
feedAndMultiply関数の引数は_zombieId(uint)と_targetDna(uint)なので、それぞれ_zombieIdとkittyDnaを渡します。
お疲れさまでした!
<参考>
CryptoZombies - イーサリアム上でゲームを開発する方法を学習。Powered by Loom Network