簡體   English   中英

具有 1/2 值和短變量聲明的函數兩次分配給同一變量

[英]Function with 1/2 values and short variable declaration assigned twice to same variable

我對以下代碼有兩個問題

  1. emptyinterface.(int)可以返回一個或兩個值,如何定義函數來實現這種效果?
  2. ok已經使用短變量聲明被聲明了兩次,為什么在這種情況下是可能的?
package main

import (
    "fmt"
)

func main() {
    var emptyinterface interface{}
    emptyinterface=4

    i1:=emptyinterface.(int)
    fmt.Println(i1)
    i2,ok:=emptyinterface.(int)//<- how the function is defined such that it can return either 1 (i1) or 2 values (i2,ok)?
    fmt.Println(i2,ok)
    i3,ok:=emptyinterface.(string) //<--why I can reassign to ok, which has assign previously?
    fmt.Println(i3,ok)
}
  1. 這不是功能,而是語言功能。 你不能寫一個這樣做的函數,但編譯器編寫者可以創建一些這樣做的語法。

  2. A :=如果左側沒有新變量則無效。 如果至少聲明了一個新變量,則是允許的。

在每種情況下,至少有一個新變量與ok一起創建,即i2i3 ,所以重新聲明ok是完全沒問題的。

這在短變量聲明下的語言規范(強調我的)中有詳細記錄

與常規變量聲明不同,短變量聲明可以重新聲明變量,前提是它們最初在同一塊(如果塊是函數體,則為參數列表)中早期聲明的具有相同類型,並且至少有一個非空變量是新的 因此,重新聲明只能出現在多變量短聲明中。

另外還不清楚,你在這里指的是什么,類型斷言是語言的一個特性,它斷言接口中的值是否屬於特定類型。 如果斷言成功,則它始終返回基礎值,否則返回失敗。 在其他地方有意義地使用它之前,您應該始終檢查類型斷言(第二個參數)的返回值。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM