2015-12-31 17 views
7

Geçenlerde kod aşağıda bulunan:Bu dizi init sözdizimi ne anlama geliyor? (Tuşlarıyla elemanları)

var noEscape = [256]bool{ 
    'A': true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, 
    'a': true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, 
    '0': true, true, true, true, true, true, true, true, true, true, 
    '-': true, 
    '.': true, 
    '_': true, 
    '~': true, 
} 

Bu [N]bool varsayılan olarak N false (sıfır) ile başlatılır anlıyoruz. Ve eğer bir endeksin izlediği endeks belirtilmişse, indeks (kapsayıcı) olarak tanımlanabilir. Nerede tarif edilir? Endeks değeri olarak hangi türler kullanılabilir (örnekte char var)?

+0

Git, 'char' türü yok. Bunlar "rune" değişmezleri ve "rune", int32 için bir tür takma addır. Daha fazla bilgi için https://golang.org/ref/spec#Rune_literals adresini ziyaret edin. – voutasaurus

cevap

7

Bir dizi veya dilim için, dizin değerleri sabit olmalıdır. Dizi ve dilim değişmezleri için "composite literals"

dokümanlar itibaren aşağıdaki kurallar geçerlidir:

  • Her öğe dizideki konumunu işaretleme ilişkili bir tamsayı dizini vardır.
  • Anahtarlı bir öğe anahtarı anahtarı olarak kullanır; anahtar, sabit bir tamsayı ifadesi olmalıdır.
  • Anahtarsız bir öğe, önceki öğenin dizinini artı bir kullanır. İlk elemanın anahtarı yoksa, endeksi sıfırdır.

örnekte asıl karakterler sadece literal tek rune olarak yazılabilir başına hangi constants türsüzdür. Dizin olarak kullanılacak bir değişkene bu değerleri atayacak olsaydınız, kod derlenmezdi.

+0

reflect.TypeOf ('a') bir değişken aracılığıyla bile int32 değerini döndürür. http://play.golang.org/p/udDxnPquaA – voutasaurus

+1

@voutasaurus: Bir rune literal olarak yazılan, yazılmamış bir sabitin "varsayılan türü", "int32" için bir takma ad olan "rune" dir. Yansıtmanın ne olduğunu belirlemek için geçerli bir türe dönüştürmesi gerektiğinden, her iki sürüm de 'int32'yi yazdırır. Varsayılan türleri açıklayan "Sabitler" özelliğine bir bağlantı ekledim. – JimB