yethan.goes.asna
約1年以上 前に投稿  25 Karma
【solidity】コントラクトのインスタンス生成方法の違い

書籍、「はじめてのブロックチェーンアプリケーション」を読み進めています。
その中での一節「3.4.3 他のコントラクトのメソッドを実行」でのサンプルコードについて質問です。

サンプルコード
```solidity
pragma solidity 0.4.8;

contract A {
uint public num = 10; // 10で固定とします(publicのためアクセス可能)
function getNum() constant returns (uint) {
return num;
}
}

contract B {
A public a;
address public addr;

// 別途作成したAのアドレスをセットします
function setA(A a) {
a = A(
a); // Aにキャストしてセット
addr = _a; // アドレスのまま保持
}
// 状態変数numを直接取得
function aNum() constant returns (uint) {
return a.num(); // 10
}
// メソッドからnumを取得
function aGetNum() constant returns (uint) {
return a.getNum(); // 10
}
// 状態変数numを直接取得
function aNum2() constant returns (uint) {
return A(addr).num(); // 10 (使用時にキャストしてもOK)
}
}
```

疑問点
コントラクトBでのメソッドsetAにおいて、
コントラクトAのインスタンスを作る部分についての疑問です。
solidity
a = A(_a)

new構文を使う場合と何が違うのでしょうか。
また、「Aにキャストしてセット」とありますが、キャストとはどういう意味でしょうか。

ja
#solidity
yethan.goes.asna
約1年以上 前に投稿  25 Karma
【solidity】コントラクトのインスタンス生成方法の違い

書籍、「はじめてのブロックチェーンアプリケーション」を読み進めています。
その中での一節「3.4.3 他のコントラクトのメソッドを実行」でのサンプルコードについて質問です。

サンプルコード
```solidity
pragma solidity 0.4.8;

contract A {
uint public num = 10; // 10で固定とします(publicのためアクセス可能)
function getNum() constant returns (uint) {
return num;
}
}

contract B {
A public a;
address public addr;

// 別途作成したAのアドレスをセットします
function setA(A a) {
a = A(
a); // Aにキャストしてセット
addr = _a; // アドレスのまま保持
}
// 状態変数numを直接取得
function aNum() constant returns (uint) {
return a.num(); // 10
}
// メソッドからnumを取得
function aGetNum() constant returns (uint) {
return a.getNum(); // 10
}
// 状態変数numを直接取得
function aNum2() constant returns (uint) {
return A(addr).num(); // 10 (使用時にキャストしてもOK)
}
}
```

疑問点
コントラクトBでのメソッドsetAにおいて、
コントラクトAのインスタンスを作る部分についての疑問です。
solidity
a = A(_a)

new構文を使う場合と何が違うのでしょうか。
また、「Aにキャストしてセット」とありますが、キャストとはどういう意味でしょうか。

ja
#solidity

1回答
avcdsld
約1年以上 前に回答 135 Karma
a = A(_a)

このコードは A のインスタンスを生成していません。
ただ、A の型として解釈するように指示しているだけです(これをキャストといいます。プログラミングの一般的な用語です。)

インスタンスを生成するときは new 演算子を使います。

a = A(_a)

このコードは A のインスタンスを生成していません。
ただ、A の型として解釈するように指示しているだけです(これをキャストといいます。プログラミングの一般的な用語です。)

インスタンスを生成するときは new 演算子を使います。

Earn tokens by posting and answering questions about blockchain!
Karma to eth
あなたの回答