2016-03-23 41 views
5
  1. Hangi sürümü kullanıyorsunuz (go sürüm)? https://play.golang.orgNeden "const true = false" izinli?

  2. Ne yaptın?

    package main 
    
    import "fmt" 
    
    const true = false 
    
    func main() { 
        if (true == false) { 
         fmt.Println("True equals to false") 
        } 
        fmt.Println("Hello World") 
    } 
    

    https://play.golang.org/p/KwePsmQ_q9

    1. Ne görmek bekliyordun :

    küçük programı çalıştır?

Zaten önceden tanımlanmış adla sabit oluşturduğum ve potansiyel olarak tüm uygulamayı kırdığımız hata veya uyarı iletisi.

  1. Bunun yerine ne gördünüz?

Sorunsuz çalışıyor. Önceden tanımlanmış isimle yeni sabit oluşturmayı önlemek için herhangi bir uyarı veya hiçbir şey.

+1

Komik şey. "Var true = false" aynı sonucu verir. Ama bir paket veya ithalat bildirmeye çalıştığımda bu hatayı alıyorum: "prog.go: 6: sözdizimi hatası: beklenmeyen bir paket, ad bekliyor prog.go: 6: ad bildiremezsiniz" – Vityata

+2

Olası yinelenen [Neden vardır?] 've' anahtar kelimeleri rezerve etmeyin? '(http://stackoverflow.com/questions/31987772/why-are-new-and-make-not-reserved-keywords)' Yeni 've' make 'hakkında sorular sorar. ama 'true' aynı zamanda cevapların burada da geçerli olmasını sağlayan [önceden tanımlanmış bir tanımlayıcıdır] (https://golang.org/ref/spec#Predeclared_identifiers). – icza

+2

Doğru veya yanlış anahtar kelimeler (https://golang.org/ref/spec#Keywords) ancak önceden tanımlanmış tanımlayıcılar (https://golang.org/ref/spec#Predeclared_identifiers) ve bunların iyi olduğunu ve nasıl çalıştığını yeniden tanımlarsınız tüm dil. – Volker

cevap

9

true ve false, ayrılmış anahtar kelimeler değildir. Bunlar önceden tanımlanmış tanımlayıcılardır.

const (
     true = 0 == 0 // Untyped bool. 
     false = 0 != 0 // Untyped bool. 
) 

Bu true ve false basit iki Türlenmemiş boolean değer olduğu anlamına gelir. Bu, örneğinizde true'un false'a eşit olmasının nedeni budur.

https://golang.org/pkg/builtin/#pkg-constants

İlgili konular