2013-08-31 3 views
6

Ich habe ein bisschen Mühe, eine absteigende Sequenz von int64 zu deklarieren.Warum kommt der F # -Compiler mit seq {0L ..- 5L ..- 10L} in Twist?

Was ich will, ist dies:

seq{0L..-5L..-10L};; 

Allerdings bekomme ich eine Fehlermeldung:

seq{0L..-5L..-10L};; 
    ---^^^^^^^^^^^^^^^ 

stdin(5,4): error FS0739: Invalid object, sequence or record expression 

Interessanterweise funktioniert es mit einfachen int:

> seq{0..-5..-10};; 
val it : seq<int> = seq [0; -5; -10] 

Noch interessanter ist, Wenn ich Leerzeichen zwischen .. platziere, beginnt es mitzu arbeiten Auch:

> seq{0L .. -5L .. -10L};; 
val it : seq<int64> = seq [0L; -5L; -10L] 

Kann jemand erklären, warum der Compiler in den Drall bekommt mit seq{0L..-5L..-10L}?

Antwort

6

Ich stimme zu, dass dies ein bisschen seltsames Verhalten ist. Es wird allgemein empfohlen (obwohl dies nicht unbedingt von der Spezifikation verlangt wird), Leerzeichen um .. zu schreiben, und es funktioniert in diesem Fall korrekt. Also würde ich empfehlen die Verwendung von:

seq { 0 .. -5 .. -10 } 
seq { 0L .. -5L .. -10L } 

Warum ist das anders verhalten für int und int64? Wenn Sie 1..-2 und 1L..-2 schreiben, koloriert Visual Studio den Text anders (im ersten Fall .. hat die gleiche Farbe wie Zahlen, im anderen Fall hat es die gleiche Farbe wie .. mit Leerzeichen).

Das Problem ist, dass, wenn der Compiler 1. sieht, kann sie einen Gleitkommawert bedeuten (1.0) oder es kann ein Start der 1.. sein, so dass dieser Fall ist besonders behandelt. Für 1L. ist das kein Problem - 1L. muss der Anfang von 1L.. sein. Wenn Sie also 1..-5..-10 schreiben, verwendet der Compiler die spezielle Behandlung und generiert eine Sequenz. Wenn Sie 1L..-5..-10 schreiben, analysiert der Compiler ..- als einen unären Operator, der auf 5L angewendet wird. Durch das Schreiben der Leerzeichen wird die Mehrdeutigkeit zwischen dem unären Operator und .. gefolgt von einer negativen Zahl aufgelöst.

Als Referenz hier ist ein Screenshot von meinem Visual Studio (die 10.. in grün zeigt, aber .. auf der zweiten Linie in gelb - nicht besonders spürbaren Unterschied, aber sie sind anders :-))

enter image description here

+1

In meinem Visual Studio (2012) bekomme ich keine Unterschiede in der Farbe mit Standardschema. Benutzt du ein spezielles Schema? –

+0

@KomradeP. Das ist durchaus möglich - ich habe die Farben der Zahlen geändert. Ich habe einen Screenshot hinzugefügt (aber Sie müssen möglicherweise zoomen, die Farben sind ähnlich ..) –

Verwandte Themen