2016-04-08 46 views
1

ISO Pascal'ın bir bölümünü bulmaya çalışırken biraz kafam karıştı.ISO Pascal alan değişkenleri olmadan kayıt varyantları

gramer bunu sağlar:

type RPoint = Record 
    Case Boolean of 
    False : (X,Y,Z : Real); 
    True : (R,theta,phi : Real); 
end; 

Bunu oluşturmak için yapmanız: Case Boolean kısmının amacı ne:

var p: RPoint; 
begin 
    p.x := 1; 
end. 

anlamıyorum bir kısım var? Anladığım kadarıyla case MyVal: Boolean; daha sonra MyVal alan seçici olur. Ancak, alan seçici olmadığında amaç nedir, sadece bir tür?

Ek olarak, standart söyler: Her varyant-bölümü ile

varyantı kısmen sahip olduğu seçici tip belirlenmiş bir tür ilişkilendirilir. Varyant parçasının varyant seçicisi bir etiket alanı içeriyorsa veya varyant parçasının her bir varyantının listesi sadece bir kasa sabiti içeriyorsa, o zaman seçici tipi tarafından belirtilir. etiket tipi ve varyant parçanın her bir varyantı, varyantının vaka sabit listesinin kutu sabitleri ile belirtilen seçici tipiyle belirtilen değerleri ile ilişkilendirilecektir. Aksi takdirde, varyant parçasının sahip olduğu selektör tipi, 'un, varyant parçanın her varyantı için tam olarak bir değere sahip olacak şekilde oluşturulduğu yeni bir ordinal tip olacaktır ve bu tür bir varyantın her biri, ile ilişkili olacaktır. Bu türden ayrı bir değer.

Oldukça selector-type ne anlamıyorum ve neden yeni bir ordinal-type olacaktır. selector-type, sadece case Boolean of'da olduğu gibi olmaz mı? Ve sadece bir case-constant olan her case-constant-list bununla ne ilgisi var?

+0

comp.lang.pascal.ansi-iso haber grubu ISO Ayrıntılar için iyi kaynak oldu ve yıl içinde bir işlem görmemiştir buna rağmen hala orada kullanıcı sohbette olabilir. Bunun dışında, konuyla ilgili Gnu Pascal (GPC) belgelerini araştırmayı deneyin. –

cevap

2

Burada, varyant kaydınızda iki olası "kişiliğe" sahiptir. Boole, iki olası değere sahip bir türdür. Yani, mantıklı bir seçim gibi görünüyordu. Ancak, Boolean olmak zorunda değil.

Aynı efekti elde etmek için Tamsayı veya Byte gibi başka bir sıra türü kullanmış olabilirsiniz. Örneğin: Geçmişte

type RPoint = Record 
    Case Byte of 
    0: (X,Y,Z : Real); 
    1: (R,theta,phi : Real); 
end; 
+0

Yani tür gerçek çalışma zamanı temsilciliği sunmuyor? Sadece farklı "kişilikler" tanımlamak içindir? – refi64

+0

Tam olarak. Her vaka için daha sonra kullanılacaklar için sadece bir tür. Sadece derleyici için yararlıdır. Bunun için çalışma zamanı yok. – tonypdmtr

+0

Bir soru daha: 'case-constant' hakkında sahip olmakla ilgili her şey ne anlama geliyor? Yoksa sadece işe yaramaz "standart" saçmalık mı? – refi64