小编Mah*_*h B的帖子

理解Go中的变量范围

我正在通过Go规范来学习语言,这些要点来自" 声明和范围 "中的规范.

虽然我能够理解第1-4点,但我对第5点和第6点感到困惑:

  1. 在函数内声明的常量或变量标识符的范围从ConstSpec或VarSpec(短变量声明的ShortVarDecl)结束开始,并在最内层包含块的末尾结束.
  2. 在函数内声明的类型标识符的范围从TypeSpec中的标识符开始,并在最内层包含块的末尾结束.

这是我用来理解Go中范围的代码:

package main

import "fmt"

func main() {
    x := 42
    fmt.Println(x)
    {
        fmt.Println(x)
        y := "The test message"
        fmt.Println(y)
    }
    // fmt.Println(y) // outside scope of y
}
Run Code Online (Sandbox Code Playgroud)

从这段代码中我了解到范围x是在main函数内,并且范围y是在开始和结束括号之后fmt.Println(x),并且我不能y在结束括号之外使用.

如果我理解正确的话,第4点和第5点都说同样的话.所以我的问题是:

  1. 如果他们说同样的话,这两点的重要性是什么?

  2. 如果它们不同,您能告诉我区别吗?

scope go variable-declaration type-declaration

5
推荐指数
2
解决办法
2891
查看次数

如何为 Solidity 中的函数设置默认参数

我在下面的示例中遇到了Solidity Documentation并且在我的项目中有类似的代码,default value如果键不是从调用者传递的,我想设置为键参数

pragma solidity ^0.4.0;

contract C {
    function f(uint key, uint value) public {
        // ...
    }

    function g() public {
        // named arguments
        f({value: 2, key: 3});
    }
}
Run Code Online (Sandbox Code Playgroud)

我的问题是——

  • Solidity 语言提供了default parameters吗?
  • 如果不允许使用默认参数,如何实现相同的目标?

感谢帮助?

solidity

4
推荐指数
1
解决办法
3870
查看次数