zoukankan      html  css  js  c++  java
  • 从零构建以太坊(Ethereum)智能合约到项目实战——学习笔记5

    P17 、8-Solidity值类型与引用类型

    由于solidity是一个静态类型的语言,所以编译时需明确指定变量的类型(包括本地变量状态变量),solidity编程语言提供了一些基本类型(elementary types)可以用来组合复杂类型。

    值类型(Value Type)

    值类型包含:

    • 布尔(Booleans)
    • 整型(Integer)
    • 地址(Address)
    • 定长字节数组(fixed byte arrays)
    • 有理数和整型(Rational and Integer Literals,String literals)
    • 枚举类型(Enums)
    • 函数(Function type)

    值类型传值时,会临时拷贝一份内容出来,而不是拷贝指针,当你修改新的变量时,不会影响原来的变量的值。

    例如:

    int a = 100; //a == 100
    int b = a;     //b == 100,a == 100 
    b = 300;      //b == 300,a == 100

    由上面的数据看,执行 b=a 时,会将a的值临时拷贝一份传给b,所以当你修改b时,其实与a没有任何关系。

    引用类型(Reference Types)

    引用类型包含:

    • 不定长字节数组(bytes)
    • 字符串(string)
    • 数组(Arrary)
    • 结构体(Structs)

    引用类型,赋值时,我们可以值传递,也可以引用即地址传递,和上面的案例一样,修改新变量时,不会影响原来的变量值,如果是引用传递,那么当你修改新变量时,原来变量的值会跟着变化,这是因为新旧变量同时指向同一个地址的原因。


    P18 、9-Solidity值传递

    pragma solidity ^0.4.4;
    contract Person{
        uint _age;
        function Person(uint age){
            _age=age;
        }
        function f(){
            modify(_age);
        }
        function modify(uint age){
            age=100;
        }
        function age() constant returns(uint){
            return _age;
        }
    }

    P19 、10-Solidity引用类型(storage/memory)

    pragma solidity ^0.4.4;
    contract Person{
        string _name;
        
        function Person(string name){
            _name = name;
        }
        
        function f(){
            modify(_name );
        }
        
        //memory 可被认为是值传递 ,默认为此
        //storage 可被认为是指针(引用),函数类型必须是internal或者是private
        function modify(string storage name) internal {
            //此时不能直接对name赋值,必须先转为数组,对数组内容做修改才可
            bytes(name)[0]="L";
        }
        function name() constant returns(string){
            return _name;
        }
    }

    P20 、Solidity Types - 布尔(Booleans)

    布尔(Booleans)

    bool:可能的取值为常量值true和false。

    支持的运算符:

    • !  逻辑非
    • && 逻辑或
    • ||    逻辑与
    • ==  等于
    • !=不等于
    pragma solidity ^0.4.4;
    contract Test{
       uint _a;
       uint _b;
       
       bool _c;
       
       function Person(){
            _a=100;
            _b=200;
            _c=true;
       }
       function fei() constant returns(bool){
           return (!_c);
       } 
       function luojiyu() constant returns(bool){
           return _a==_b && _c;
       }
       function luojihuo() constant returns(bool){
           return _a !=_b || _c;
       }
    }
  • 相关阅读:
    Qt音视频开发24-ffmpeg音视频同步
    Qt编写的项目作品34-雷达模拟仿真工具(雨田哥作品)
    Qt编写的项目作品33-斗图神器(雨田哥作品)
    Qt编写的项目作品32-定制化安装包工具(雨田哥作品)
    Qt编写的项目作品31-PDF阅读器(雨田哥作品)
    Caused by: com.rabbitmq.client.ShutdownSignalException: channel error; protocol method: ......
    com.alibaba.fastjson.JSONException: syntax error, pos 1
    chrome技巧
    pip强制重装
    javascript添加url querystring
  • 原文地址:https://www.cnblogs.com/little-kwy/p/10327644.html
Copyright © 2011-2022 走看看