成员相等在类型中不可用(库断言)
Posted
技术标签:
【中文标题】成员相等在类型中不可用(库断言)【英文标题】:Member equal is not available in type(library Assert) 【发布时间】:2017-08-04 14:50:48 【问题描述】:当我想测试一个字符串值是否正确时,问题就出现了。数字被正确断言,并且在尝试编译时不会返回错误消息。但是,当我尝试断言一个字符串时,它会返回以下错误消息:
Error: Member "equal" is not available in type(library Assert) outside of storage.
Assert.equal(token.symbol(), "$", "The symbol of the token should be $");
^----------^
Compiliation failed. See above.
Token.sol
pragma solidity ^0.4.8;
contract Token
/* The amount of tokens a person will get for 1 ETH */
uint256 public exchangeRate;
/* The name of the token */
string public name;
/* The address which controls the token */
address public owner;
/* The symbol of the token */
string public symbol;
/* The balances of all registered addresses */
mapping (address => uint256) balances;
/* Token constructor */
function Token(uint256 _exchangeRate, string _name, string _symbol)
exchangeRate = _exchangeRate;
name = _name;
owner = msg.sender;
symbol = _symbol;
function getBalance(address account) returns (uint256 balance)
return balances[account];
TestToken.sol
pragma solidity ^0.4.8;
// Framework libraries
import "truffle/Assert.sol";
import "truffle/DeployedAddresses.sol";
// Custom libraries and contracts
import "../contracts/Token.sol";
contract TestToken
function testExchangeRate()
Token token = new Token(500, "Dollar", "$");
uint256 expected = 500;
Assert.equal(token.exchangeRate(), expected, "The exchange rate should be 500 tokens for 1 ETH");
function testSymbol()
Token token = new Token(500, "Dollar", "$");
Assert.equal(token.symbol(), "$", "The symbol of the token should be $");
为什么会发生这种情况以及如何解决?
【问题讨论】:
也许这会有所帮助? ethereum.stackexchange.com/q/1701 有关于这个话题的消息吗? 【参考方案1】:尝试将类型从 string
更改为另一个类型,例如 bytes32
。它有效。
一切顺利。
【讨论】:
【参考方案2】:到目前为止,solidity 不支持在合约之间返回字符串。因为在调用时不知道字符串的长度。所以它们只支持固定大小的数组,比如 bytes32。
您可以使用多个 bytes32 来存储字符串的不同部分。
【讨论】:
以上是关于成员相等在类型中不可用(库断言)的主要内容,如果未能解决你的问题,请参考以下文章
系统 F 中的类型示例在 Hindley Milner 类型推断中不可用
为啥这个 Javascript 库在浏览器中可用,但在 PhoneGap 中不可用?
库已安装并在 conda 中显示,但在 Jupyter Notebook 中不可用
C++ 为啥 Traits 在对象上不可用,而是作为静态成员变量可用
无法计算构建计划:artifact org.apache.maven.plugins:maven-resources-plugin:pom:2.4.3 在本地存储库中不可用