Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Seltsame Fehlermeldung - Diskussion in der Vorlesung

0 views
Skip to first unread message

Christian Buckl

unread,
Nov 17, 2005, 11:24:55 AM11/17/05
to
Hallo,

im Auftrag von Prof. Knoll soll ich wie heute in der Vorlesung besprochen
die etwas seltsame Fehlermeldung:
"This expression has type t but is here used with type t"
erläutern.

Ein schönes Beispiel für eine Ursache dieser Fehlermeldung ist folgender
Code (nachzulesen auch im OCaml-Handbuch s.49).

#type t1= Emtpy | Full;;
#let empty_t1 x = match x with Empty -> true | Full -> false;;

Es wird also ein Typ t1 definiert und eine Funktion auf diesem Typ.
Nun deklarieren wir einen neuen Typ t1 (wir überschreiben den alten)
#type t1 = { u:int; v:int};;

und legen eine Variable dieses Typs an:
#let y = {u=2;v=3};;

und rufen die Funktion empty_t1 mit dieser Variablen auf
#empty_t1 y;;

Dies gibt natürlich einen Fehler und zwar den vorher beschriebenen. Das
Umdeklarieren des Typs t1 hat zwar die erste Definition überschrieben, die
erste Funktion wird maskiert. Dennoch existieren beide Definitionen. Und
deshalb kann der Compiler auch nichts anderes machen als diese seltsame
Fehlermeldung ausgeben (schließlich weiss er nicht, wie er den Typ einer
Variablen von der ersten Typdefinition auch anders nennen sollte).

Als Beispiel aus dem Alltag könnten sie einen Autoverkauf sehen. Es gibt
z.B. im Laufe der Zeit verschiedene Versionen eines Autos. Natürlich wollen
sie immer das neueste Auto haben. Sie gehen also zum Händler (sie sind die
Funktion) und er gibt ihnen als Argument eine alte Version. Dann könnten sie
die gleiche unverständliche Fehlermeldung sagen: ich will das Auto der Marke
xy und nicht der Marke xy. Natürlich sind sie intelligenter als der Compiler
(zum Glück) und werden vielleicht noch sagen, dass sie die neueste Version
wollen.

Ich hoffe mit dem Beispiel das Problem ein wenig erläutert zu haben. Falls
es weitere Fragen zu dem Thema gibt oder eine Fehlermeldung nicht verstanden
wird, so posten sie doch ihre Frage einfach in der Newsgroup. Ich werde sie
dann nach Möglichkeit beantworten.

Gruß,

Christian Buckl


--------------------------------------------------------------------------------
Dipl. Inf. Christian Buckl
Institut für Informatik
Technische Universität München
Raum 03.07.061, Boltzmannstr. 3, 85748 Garching


0 new messages