美文网首页
【Solidity学习笔记】动态定义数据类型——关键词var

【Solidity学习笔记】动态定义数据类型——关键词var

作者: 海阳之新 | 来源:发表于2018-04-18 18:08 被阅读45次

    var

    用于动态定义数据类型,建议尽量少用。

    举个栗子:
    var a = true; //bool型
    a = 1; //上一行赋值,a被定义成了bool型,再次赋值其他数据类型时,编译会报错
    var b = 0; //uint8型
    var c = 'hello world'; //string型

    如上,a,b,c在合约中第1次被赋值成什么类型的数据,就决定了它们各自的类型。

    遇到的坑

    pragma solidity ^0.4.17;
    
    contract Test
    {
        function testVar() constant returns (uint8) {
            uint8 a = 100;
            var b = a; //b为uint8类型
            return b; //返回uint8 100
        }
    
        function testVar1() constant returns (uint16) {
            uint8 a = 100;
            var b = a; //b为uint8类型
            return b; //返回uint16 100,因为uint16>uint8的存储范围,返回时做了转换
        }
    
        function testVar2() constant returns (string) {
            uint8 a = 100;
            var b = a; //b为uint8类型
            return b; //编译报错,因为b的类型与returns定义的类型不相同,且不能转换
        }
    
        //遇到了坑
        function testVar3() constant returns (uint8) {
            uint8 a;
            for(var i = 0; i<=255; i++) { //i被定义成了uint8,当i=255且运行完for循环里面代码时,执行i++则超出了uint8的范围,报错
              a = i;
            }
            return a;
        }
    
    }
    

    如上代码,var i=0等价于给i定义成了uint8类型,当i=255且运行完for循环里面代码时,执行i++则超出了uint8的范围,程序报错。

    相关文章

      网友评论

          本文标题:【Solidity学习笔记】动态定义数据类型——关键词var

          本文链接:https://www.haomeiwen.com/subject/sfcbkftx.html