Das Notes Forum

Domino 9 und frühere Versionen => ND7: Entwicklung => Thema gestartet von: Dubidu am 20.03.08 - 11:54:03

Titel: VM verwechselt Zuweisung mit Vergleich
Beitrag von: Dubidu am 20.03.08 - 11:54:03
Hallo,
die LotusScript-VM scheint bei einer If-Abfrage eine Zuweisung mit einem Vergleich zu verwechseln.

Hier meine erste Version, die nicht wie gewünscht funktioniert:

Code
	If (tmp = doc.GetItemValue("tfKilometer")(0)) <> "" Then
		flag = "Meilen"
		doc.tfMeilen = ConvertKMMI(tmp, flag)
	Else 
		If (tmp = doc.GetItemValue("tfMeilen")(0)) <> "" Then
			flag = "Kilometer"
			doc.tfKilometer = ConvertKMMI(tmp, flag)
		End If
	End If

tmp wurde vorher nur deklariert. Somit ist der Wert standardmäßig "".
Die VM interpretiert meinen Code als Vergleich zwischen tmp und doc.GetItemValue("tfKilometer")(0) (das leer ist). Die Anweisung ist erfüllt und die VM geht in die If-Bedingung hinein (das konnte ich alles über den Debugger beobachten!). Anschließend bekomme ich eine Fehlermeldung, da die Funktion ConvertKMMI den String tmp in eine Zahl umwandeln will.

Schreibe ich jedoch folgenden Code, dann funktioniert alles wie gewünscht:

Code
tmp = doc.GetItemValue("tfKilometer")(0)
	If tmp <> "" Then
		flag = "Meilen"
		doc.tfMeilen = ConvertKMMI(tmp, flag)

...
...

Gibt es vielleicht doch eine Möglichkeit tmp in der If-Anweisung zu initialisieren?

Liebe Grüße
Giordano
Titel: Re: VM verwechselt Zuweisung mit Vergleich
Beitrag von: Axel am 20.03.08 - 12:36:23
Gibt es vielleicht doch eine Möglichkeit tmp in der If-Anweisung zu initialisieren?

Nein. Du hast hier kein C oder Java oder eine sonstige Hochsprache in der das vielleicht geht.

In LotusScript ist das = - Zeichen sowohl ein Zuwesiungsoperator als auch ein Vergleichsoperator.


Axel


PS: Was ist eine LotusScript-VM?  :-:  Ich kenne nur VMs in VErbindung mit virtuellen Maschinen
Titel: Re: VM verwechselt Zuweisung mit Vergleich
Beitrag von: koehlerbv am 20.03.08 - 12:39:30
Nachtrag zu Axel:
LotusScript resp. BASIC verwechselt hier auch nichts, sondern arbeitet absolut definitionsgemäss.
Abgesehen davon kannst Du Dein Ziel ja völlig problemlos erreichen - Du musst nur Zuweisung und Vergleich sorgfältig trennen (was auch der Lesbarkeit des Codes entgegen kommt - würde ich in C auch so machen.

Und was bitte ist "VM"?

Bernhard
Titel: Re: VM verwechselt Zuweisung mit Vergleich
Beitrag von: MadMetzger am 20.03.08 - 12:40:24
Ich denke mal, dass er mit VM virtuelle Maschine meint, aber gibt es die in LS überhaupt?
Titel: Re: VM verwechselt Zuweisung mit Vergleich
Beitrag von: koehlerbv am 20.03.08 - 12:44:19
Nö.
Titel: Re: VM verwechselt Zuweisung mit Vergleich
Beitrag von: Dubidu am 20.03.08 - 13:07:22
Hi,
gut, dann geht das eben nicht! :(

Ja, mit VM meinte ich Virtual Machine. Wenn Lotus Designer den Code tatsächlich in Maschinensprache kompiliert, dann hat es keine VM.

Liebe Grüße
Giordano
Titel: Re: VM verwechselt Zuweisung mit Vergleich
Beitrag von: Axel am 20.03.08 - 13:10:16
Wenn Lotus Designer den Code tatsächlich in Maschinensprache kompiliert, dann hat es keine VM.

 ???  ???


Axel
Titel: Re: VM verwechselt Zuweisung mit Vergleich
Beitrag von: Dubidu am 20.03.08 - 13:11:52
Wenn Lotus Designer den Code tatsächlich in Maschinensprache kompiliert, dann hat es keine VM.

 ???  ???

 ???
Titel: Re: VM verwechselt Zuweisung mit Vergleich
Beitrag von: flaite am 20.03.08 - 13:13:57
Nein. Du hast hier kein C oder Java oder eine sonstige Hochsprache in der das vielleicht geht.
Hm. Java ist keine Hochsprache wie C sondern eher eine gemeinsame Basis von verschiedenen Plattformen  ;D
Zitat
Ja, mit VM meinte ich Virtual Machine. Wenn Lotus Designer den Code tatsächlich in Maschinensprache kompiliert, dann hat es keine VM.
Und ausserdem kompilieren VMs eine Menge Code in Maschinensprache, z.B. über JIT Compiler in der Java VM.  ;D

Titel: Re: VM verwechselt Zuweisung mit Vergleich
Beitrag von: koehlerbv am 20.03.08 - 13:17:28
Um das noch klarzustellen: Der Designer macht beim Speichern von LS-Code eine Precompilation und erzeugt tokenisierten Code. Dieser wird dann vom (OS-abhängig zu Verfügung gestellten) Interpreter zur Laufzeit ausgeführt.
Über den Begriff einer virtual machine werden wird hier sicher nicht debattieren. Gleiches gilt für die Vor- oder Nachteile von BASIC oder LotusScript.

Bernhard