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

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的范围,程序报错。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 《ijs》速成开发手册3.0 官方用户交流:iApp开发交流(1) 239547050iApp开发交流(2) 10...
    叶染柒丶阅读 5,768评论 0 7
  • 渲染: 1 当前屏幕渲染:在GPU的当前屏幕缓冲区中进行的渲染 2 离屏渲染:在GPU当前屏幕缓冲区外另建缓冲区渲...
    adrian920阅读 473评论 0 0
  • 《ilua》速成开发手册3.0 官方用户交流:iApp开发交流(1) 239547050iApp开发交流(2) 1...
    叶染柒丶阅读 11,751评论 0 11
  • 现实社会有太多的不如意,太多的遗憾,太多后悔,如果给你一次回到过去的机会,你会怎么做? 我曾想,要是当时我胆大点,...
    露之君阅读 353评论 0 1
  • 发现自己无意间删掉了好多东西。 内存多了很多,可是那些删掉的却再也找不到了。 有些东西,注定只存在一时,即使记录下...
    听雷雷说阅读 222评论 0 0

友情链接更多精彩内容