Arrays 稳固性:未实现的特性错误:此处未实现嵌套动态数组
当我试图以坚实的方式做这件事时,它给了我 UnimplementedFeatureError:此处未实现嵌套动态数组 我在代码示例中看到了这一点。坚固性不支持这一点吗 编辑-在下面发布完整的代码。所以我发现问题只存在于最后一个函数中。我不是在返回一个动态数组吗?如何实现相同的功能(我希望返回数据的字符串数组)Arrays 稳固性:未实现的特性错误:此处未实现嵌套动态数组,arrays,dynamic,nested,solidity,Arrays,Dynamic,Nested,Solidity,当我试图以坚实的方式做这件事时,它给了我 UnimplementedFeatureError:此处未实现嵌套动态数组 我在代码示例中看到了这一点。坚固性不支持这一点吗 编辑-在下面发布完整的代码。所以我发现问题只存在于最后一个函数中。我不是在返回一个动态数组吗?如何实现相同的功能(我希望返回数据的字符串数组) pragma-solidity^0.4.6; 合同完整性{ //映射每个电子邮件地址的EmailIntegrityStructs数组。 //第一个元素将用于完整性记录。 //其余部分将用于
pragma-solidity^0.4.6;
合同完整性{
//映射每个电子邮件地址的EmailIntegrityStructs数组。
//第一个元素将用于完整性记录。
//其余部分将用于审计记录。
枚举项类型{完整性,审核}
结构EmailIntegrityStruct{
ItemType ItemType;
uint时间戳;
字符串数据;
}
映射(地址=>EmailIntegrityStruct[])emailIntegrityStructs;
函数hasEmailIntegrityData(地址emailAddress)公共常量返回(bool-isEmail){
返回emailIntegrityStructs[emailAddress][0]。时间戳==0;
}
函数insertIntegrityData(地址emailAddress、uint时间戳、字符串数据)公共返回(bool success){
if(hasEmailIntegrityData(emailAddress)){
回复();
}
EmailIntegrityStruct内存integrityData;
integrityData.itemType=itemType.Integrity;
integrityData.timestamp=时间戳;
integrityData.data=数据;
emailIntegrityStructs[emailAddress].push(integrityData);
返回emailIntegrityStructs[emailAddress]。长度==1;
}
函数insertAuditData(地址emailAddress、uint时间戳、字符串数据)公共返回(bool success){
如果(!hasEmailIntegrityData(emailAddress)){
回复();
}
EmailIntegrityStruct内存审核数据;
auditData.itemType=itemType.Audit;
auditData.timestamp=时间戳;
auditData.data=数据;
emailIntegrityStructs[emailAddress].push(审核数据);
返回emailIntegrityStructs[emailAddress].length>1;
}
函数getIntegrityData(地址emailAddress)公共常量返回(字符串数据){
如果(!hasEmailIntegrityData(emailAddress)){
回复();
}
返回emailIntegrityStructs[emailAddress][0]。数据;
}
函数getAuditData(address emailAddress)公共常量返回(字符串[]数据){
如果(!hasEmailIntegrityData(emailAddress)){
回复();
}
var length=emailIntegrityStructs[emailAddress].length;
字符串[]内存auditData=新字符串[](长度-1);
对于(uint i=1;i
这对我来说很好
我添加了MyStruct
的定义,并将Solidity版本升级到当前版本(尽管它也使用旧的pragma
编译得很好)。以下是我编译的代码:
可能是您使用的是旧版本的Solidity编译器吗?(这个^0.4.6
让我觉得也许你是。)
你的
MyStruct
是什么?也许一个更有趣的结构会失败。一般来说,请尝试提供完整的代码示例,以再现您看到的问题。这对我来说很好
我添加了MyStruct
的定义,并将Solidity版本升级到当前版本(尽管它也使用旧的pragma
编译得很好)。以下是我编译的代码:
可能是您使用的是旧版本的Solidity编译器吗?(这个^0.4.6
让我觉得也许你是。)
你的
MyStruct
是什么?也许一个更有趣的结构会失败。一般来说,请尝试提供完整的代码示例来重现您看到的问题。Solidity和Javascript允许嵌套数组,但我们无法将嵌套动态数组从Solidity拉到Javascript世界
这是solidity和javascript之间桥梁的局限性。由于solidity中的字符串表示为动态数组,因此我们无法传输字符串数组 Solidity和Javascript允许嵌套数组,但我们无法将嵌套动态数组从Solidity拉到Javascript世界
这是solidity和javascript之间桥梁的局限性。由于solidity中的字符串表示为动态数组,因此我们无法传输字符串数组 我不想让你浪费时间回答这个问题。我刚刚读到,可以从函数返回其他类型的数组,但不能返回字符串数组,因为字符串本身就是数组。我正在研究如何解决这个问题。谢谢你的帮助!我不想让你浪费时间回答这个问题。我刚刚读到,可以从函数返回其他类型的数组,但不能返回字符串数组,因为字符串本身就是数组。我正在研究如何解决这个问题。谢谢你的帮助!
pragma solidity ^0.4.6;
contract EmailIntegrity {
// Map an array of EmailIntegrityStructs for each email address.
// The first element will be used for the integrity record.
// The rest will be used for audit records.
enum ItemType { Integrity, Audit }
struct EmailIntegrityStruct {
ItemType itemType;
uint timestamp;
string data;
}
mapping(address => EmailIntegrityStruct[]) emailIntegrityStructs;
function hasEmailIntegrityData(address emailAddress) public constant returns(bool isEmail) {
return emailIntegrityStructs[emailAddress][0].timestamp == 0;
}
function insertIntegrityData(address emailAddress, uint timestamp, string data) public returns(bool success) {
if (hasEmailIntegrityData(emailAddress)) {
revert();
}
EmailIntegrityStruct memory integrityData;
integrityData.itemType = ItemType.Integrity;
integrityData.timestamp = timestamp;
integrityData.data = data;
emailIntegrityStructs[emailAddress].push(integrityData);
return emailIntegrityStructs[emailAddress].length == 1;
}
function insertAuditData(address emailAddress, uint timestamp, string data) public returns(bool success) {
if (!hasEmailIntegrityData(emailAddress)) {
revert();
}
EmailIntegrityStruct memory auditData;
auditData.itemType = ItemType.Audit;
auditData.timestamp = timestamp;
auditData.data = data;
emailIntegrityStructs[emailAddress].push(auditData);
return emailIntegrityStructs[emailAddress].length > 1;
}
function getIntegrityData(address emailAddress) public constant returns(string data) {
if (!hasEmailIntegrityData(emailAddress)) {
revert();
}
return emailIntegrityStructs[emailAddress][0].data;
}
function getAuditData(address emailAddress) public constant returns(string[] data) {
if (!hasEmailIntegrityData(emailAddress)) {
revert();
}
var length = emailIntegrityStructs[emailAddress].length;
string[] memory auditData = new string[](length - 1);
for (uint i = 1; i < length ; i++) {
auditData[i] = emailIntegrityStructs[emailAddress][i].data;
}
return auditData;
}
}
pragma solidity ^0.4.19;
contract MyContract{
struct MyStruct {
uint256 foo;
}
mapping(address => MyStruct[]) myStruct;
}