Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Bağlamsal ifadeler, yalnızca belirli bağlamlarda geçerli olan ifadelerdir; örneğin, öğe adlarını nitelemelerine gerek kalmadan kopyalama ve güncelleştirme ifadelerinde kullanma.
İfadeler, derleyici tarafından çıkarılıp otomatik olarak eklenebildiğinde atlanabilir, örneğin evaluate-and-reassign deyimleri.
Açık uçlu aralıklar, hem bağlamsal hem de atlanmış ifadeler için geçerli olan başka bir örnektir. Bunlar yalnızca belirli bir bağlamda geçerlidir ve derleyici uygun sınırlar çıkararak bunları derleme sırasında normal Range
ifadelere çevirir.
Range
türünde bir değer, bir başlangıç değeri, bir adım değeri (isteğe bağlı) ve bir bitiş değeri tarafından belirtilen bir tamsayı dizisi oluşturur. Örneğin, Range
değişmez ifade 1..3
1,2,3 dizisini oluşturur. Benzer şekilde, 3..-1..1
ifadesi 3,2,1 dizisini oluşturur. Ayrıca dilimleyerek mevcut diziden yeni bir dizi oluşturmak için de aralıkları kullanabilirsiniz, örneğin:
let arr = [1,2,3,4];
let slice1 = arr[1..2..4]; // contains [2,4]
let slice2 = arr[2..-1..0]; // contains [3,2,1]
Q#içinde sonsuz bir aralık tanımlayamazsınız; başlangıç ve bitiş değerlerinin her zaman belirtilmesi gerekir. Tek özel durum, diziyi dilimlerken bir Range
kullanmanızdır. Bu durumda, derleyici aralığın başlangıç veya bitiş değerlerini makul bir şekilde çıkarsayabilir.
Önceki dizi dilimleme örneklerinde, adım boyutu pozitifse derleyicinin hedeflenen aralık sonunun dizideki son öğenin dizini olması gerektiğini varsayması mantıklıdır. Adım boyutu negatifse, aralık sonu büyük olasılıkla dizideki ilk öğe olan 0
dizini olmalıdır. Tersi, aralığın başlangıcı için tutar.
Özetlemek gerekirse, aralık başlangıç değerini atlarsanız, çıkarım yapılan başlangıç değeri
- hiçbir adım belirtilmezse veya belirtilen adım pozitifse sıfır olur.
- , belirtilen adım negatifse dizinin uzunluğu eksi bir olur.
Aralık bitiş değerini atlarsanız, çıkarsanan bitiş değeri
- , hiçbir adım belirtilmezse veya belirtilen adım pozitifse dizinin uzunluğu eksi bir olur.
- belirtilen adım negatifse sıfır olur.
Q# bu nedenle dizi dilimleme ifadeleri içinde açık uçlu aralıkların kullanılmasına izin verir, örneğin:
let arr = [1,2,3,4,5,6];
let slice1 = arr[3...]; // slice1 is [4,5,6];
let slice2 = arr[0..2...]; // slice2 is [1,3,5];
let slice3 = arr[...2]; // slice3 is [1,2,3];
let slice4 = arr[...2..3]; // slice4 is [1,3];
let slice5 = arr[...2...]; // slice5 is [1,3,5];
let slice7 = arr[4..-2...]; // slice7 is [5,3,1];
let slice8 = arr[...-1..3]; // slice8 is [6,5,4];
let slice9 = arr[...-1...]; // slice9 is [6,5,4,3,2,1];
let slice10 = arr[...]; // slice10 is [1,2,3,4,5,6];
Aralık adımının pozitif mi yoksa negatif mi olduğunu belirleme çalışma zamanında gerçekleştiğinden, derleyici çalışma zamanında değerlendirilen uygun bir ifade ekler. Atlanan bitiş değerleri için, eklenen ifade step < 0 ? 0 | Length(arr)-1
ve atlanan başlangıç değerleri için step < 0 ? Length(arr)-1 | 0
, burada step
aralık adımı için verilen ifadedir veya hiçbir adım belirtilmezse 1
.