深入理解Solidity——作用域和声明

2023-11-18

作用域和声明(Scoping and Declarations)

  • 已声明的变量将具有其字节表示为全0的初始值。
  • 变量的初始值是任何类型的典型“零状态”(“zero-state)。例如,bool的初始值为falseuintint类型的默认值为0
  • 对于静态大小的数组和bytes1bytes32,每个单独的元素将被初始化为对应于其类型的初始值。
  • 对于动态大小的数组、bytesstring,初始值是空数组或空字符串。

在函数中任何位置声明的变量,它的作用域为整个函数,与声明位置无关。这是因为Solidity继承了JavaScript的作用域规则。这与许多语言相反——变量仅作用于声明的地方直到语句块的末尾为止。
因此,下面的代码是非法的,导致编译器抛出一个错误,标识符已经声明:

// 以下代码无法编译

pragma solidity ^0.4.16;

contract ScopingErrors {
    function scoping() public {
        uint i = 0;

        while (i++ < 1) {
            uint same1 = 0;
        }

        while (i++ < 2) {
            uint same1 = 0;// 非法,重复声明same1
        }
    }

    function minimalScoping() public {
        {
            uint same2 = 0;
        }

        {
            uint same2 = 0;// 非法,重复声明same2
        }
    }

    function forLoopScoping() public {
        for (uint same3 = 0; same3 < 1; same3++) {
        }

        for (uint same3 = 0; same3 < 1; same3++) {// 非法,重复声明same3
        }
    }
}

除此之外,如果变量被声明,则在函数的开头将其初始化为其默认值。因此,以下代码是合法的,尽管写得不好:

pragma solidity ^0.4.0;

contract C {
    function foo() public pure returns (uint) {
        // baz隐式初始化为0
        uint bar = 5;
        if (true) {
            bar += baz;
        } else {
            uint baz = 10;// 永远不会执行
        }
        return bar;// 返回 5
    }
}

上一篇:深入理解Solidity——函数调用和赋值

下一篇:深入理解Solidity——Assert, Require, Revert 和 Exceptions

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

深入理解Solidity——作用域和声明 的相关文章

  • 快乐数

    快乐数 happy number 有以下的特性 在给定的进位制下 该数字所有数位 digits 的平方和 得到的新数再次求所有数位的平方和 如此重复进行 最终结果必为1 中文名 快乐数 外文名 happy number 类型 计算方法 属于
  • 列出某个目录下面所有的文件与目录

    import java io File public class wenjian 遍历该对应对应的数组 public static void main String args File file new File d 某银行新规面资料 if
  • Spring-AOP实践 - 统计访问时间

    公司的项目有的页面超级慢 20s以上 不知道用户会不会疯掉 于是老大说这个页面要性能优化 于是 首先就要搞清楚究竟是哪一步耗时太多 我采用spring aop来统计各个阶段的用时 其中计时器工具为StopWatch 文章结构 遇到的问题 创

随机推荐

  • centos7安装nginx 报./configure: error: C compiler cc is not found

    centos7安装nginx 报 configure error C compiler cc is not found CentOS 7 下 安装 nginx 执行配置命令 configure 时提示以下错误 解决 执行以下命令 yum y
  • php伪随机数

    目录 函数介绍 代码测试 考点 1 根据种子预测随机数 2 根据随机数预测种子 函数介绍 mt srand 播种 Mersenne Twister 随机数生成器 mt rand 生成随机数 简单来说mt srand 通过分发seed种子 然
  • 如何学会像优秀程序员一样思考

    如何学会像优秀程序员一样思考 程序员的思考方式比较有意思 并且这些思考方式有时候表现得很好 这些思考方式其实可以概述下 通常包含如下几个点 一切都只是数据 数据本身没有任何意义 如果有意义那么它必须被解释 编程是关于创建和组合抽象 模型是给
  • 内容管理软件——Obsidian、Zettlr学习笔记(附Typora)

    一 Obsidian 1 官网 Obsidian 2 学习教程 Obsidian 中文论坛 3 使用经验 3 1关于markdown常用格式 标题的格式 标题级数 空格 文本内容 这是一段普通的文本 这是一级标题 这是二级标题 这是三级标题
  • ChatGPT在生态保护和可持续发展中的潜在作用如何?

    ChatGPT在生态保护和可持续发展领域具有潜在的重要作用 生态保护和可持续发展是全球性的挑战 涉及到环境保护 资源管理 气候变化应对 生物多样性保护等多个方面 ChatGPT作为一种人工智能技术 可以在以下几个方面发挥积极作用 1 数据分
  • ELK(六)ElasticSearch快速入门_中文分词

    分词 分词就是指将一个文本转化成一系列单词的过程 也叫文本分析 在ElasticSearch中称之为Analysis 举例 我是中国人 gt 我 是 中国人 分词API 指定分词器进行分词 POST analyze analyzer sta
  • 【深度学习】详解 Swin Transformer (SwinT)

    目录 摘要 一 介绍 二 原理 2 1 整体架构 2 1 1 Architecture 2 1 2 Swin Transformer Block 2 2 基于移位窗口的自注意力 2 2 1 非重叠局部窗口中的自注意力 2 2 2 在连续块中
  • 图像分割必备知识点

    文章转自 微信公众号 机器学习炼丹术 文章转载或者交流联系作者微信 cyx645016617 Unet其实挺简单的 所以今天的文章并不会很长 喜欢的话可以参与文中的讨论 在文章末尾点赞 在看点一下呗 0 概述 语义分割 Semantic S
  • GoogleCast 简介

    Google Cast Function 依赖com android support mediarouter v7com google android gms play services cast frameworkCast 过程1 fra
  • 笔记本电池冲不进电或不存电的修复方法

    不少同学的本本 用不到2年电池就坏掉了不存电 几分钟就一泻千里 成了那啥 哈哈 别想多了 还有的本本因为放的太久了 几个月没充电 发现电池冲不进去电了 这个更糟进不去都 哎 这是怎么回事呢 其实电池并没有那么脆弱 电池电芯都是锂离子的 可千
  • 深度学习 训练吃显卡_深度学习为什么需要显卡计算?

    先解释一点 深度学习为什么需要显卡计算 GPU 是为大规模的并行运算而优化 GPU 上则更多的是运算单元 整数 浮点的乘加单元 特殊运算单元等等 GPU 往往拥有更大带宽的显存 因此在大吞吐量的应用中也会有很好的性能 这里有一个很有趣的解释
  • Java对象的实例化过程

    JAVA new流程 实例化过程 java对象的实例化过程
  • 主成分分析法(三):计算步骤

    主成分分析系列 主成分分析 一 基本思想与主成分估计方法 主成分分析 二 特征值因子的筛选 主成分分析法 三 计算步骤 目录 一 主成分分析简述 二 主成分分析法的步骤 1 对原始数据进行标准化处理 2 计算相关系数矩阵R 3 计算特征值和
  • pip install总是报错:ValueError: Trusted host URL must include a host part: ‘#‘

    一 问题现象 报错信息如下 Traceback most recent call last File user name anaconda3 bin pip line 11 in
  • Matlab求解基于RRT算法的自定义垛型的路径避障

    目录 背景 1 RRT搜索算法 2 基于Matlab的RRT搜索算法 3 基于Matlab的自定义垛型绘制 4 基于RRT算法的自定义垛型的路径避障 背景 在码垛机械臂路径规划过程中 需要根据现有箱子的码垛状态 给出下一个箱子的最佳码放无碰
  • 自定义一个softirq

    本文章添加自己定义一个额外的软中断 首先添加软中断种类 MY SOFTIRQ enum HI SOFTIRQ 0 TIMER SOFTIRQ NET TX SOFTIRQ NET RX SOFTIRQ BLOCK SOFTIRQ BLOCK
  • c语言之-umask()函数

    此函数的主要作用是在创建文件时设置或者屏蔽掉文件的一些权限 一般与open 函数配合使用 umask 设置建立新文件时的权限遮罩 相关函数 creat open 表头文件 sys types h sys stat h 定义函数 mode t
  • java数据类型陷阱_java学习_3.原生数据类型使用陷阱

    原生数据类型使用陷阱 Pitfall of Primitive Data Type 1 Java中的原生数据类型共有8种 1 整型 使用int表示 32位 2 字节型 使用byte表示 表示 128 127之间的256个整数 8位 3 短整
  • 8 种流行的计算机视觉应用

    计算机视觉是人工智能的一部分 它使计算机能够从计算机化的图片 视频中获取重要数据 并根据这些数据提出建议 简单地说 你可以理解 如果人工智能允许计算机思考 那么计算机视觉就会鼓励它们去看 注意到和理解 这是在深度学习和机器学习的帮助下完成的
  • 深入理解Solidity——作用域和声明

    作用域和声明 Scoping and Declarations 已声明的变量将具有其字节表示为全0的初始值 变量的初始值是任何类型的典型 零状态 zero state 例如 bool的初始值为false uint或int类型的默认值为0 对