View Issue Details

IDProjectCategoryView StatusLast Update
0000279LDMudLPC Compiler/Preprocessorpublic2011-02-24 00:00
ReporterlarsAssigned To 
PrioritynormalSeverityfeatureReproducibilityN/A
Status feedbackResolutionopen 
Summary0000279: Tuple return values
DescriptionShort: Tuple return values
Date: Sat, 9 Feb 2002 22:04:28 +0100 (CET)
From: Markus Peter <warp@spin.de>
Type: Feature
State: New

Hallo

Mir ist heute etwas eingefallen, was evtl. ganz nett waere fuer den 3.3er
Driver, und zwar geht es um das Problem, dass eine Methode/Funktion evtl.
mal mehr als 1 Wert zurueckgeben will. Ein Objekt will man da oft nicht
verwenden weil zu ueberdimensioniert, Pass-by-reference ist als Interface
ebenfalls unschoen, also gibt man einen Array zurueck.

Benutzt man die Methode/Funktion sieht das dann meist so aus:
mixed tmp= function();
string str= tmp[0];
int i1= tmp[1];

etc. - nicht wirklich schoen.

Perl hat dafuer eine schoene Loesung gefunden - und zwar kann man dort
ein Konstrukt der Form ($var1,$var2,@rest)=function() machen, und der
erste Wert des Rueckgabearrays wird dann an var1 zugewiesen etc.

Eigentlich sollte es nichts geben, was es verbieten wuerde, ein Element
dieser Art auch in LPC einzufuehren, also z.b.:

({str,i1})= function();

Ich faend das fuer Klarheit des Ausdrucks des Codes und Kuerze eigentlich
ganz nett, (ausserdem krieg ich dann vielleicht mal zumindestens die
Perlprogrammierer unter meinen faulen Wizards zum arbeiten ;-), kann aber
natuerlich nicht beurteilen, wieviel Aufwand das konkret bedeutet, oder ob
sich die Sprache dann fuer deinen Geschmack zu weit von seinen C-Syntax
Wurzeln wegbewegt.
TagsNo tags attached.
External Data (URL)

Relationships

related to 0000189 closed Tuple datatype 

Activities

zesstra

2009-10-27 07:42

administrator   ~0001559

I think, one could just use a struct for this and save the hassle to build a new interface for function calls... Would be also much nicer with respect to types.

Coogan

2011-02-24 00:00

reporter   ~0002028

The use a struct for return values and to split it up afterwards is IMHO not really an improvement compared to the use of an array as return value. Type checking should also take place for the described construct like
int i;
string s;
mapping m;
({s,i,m}) = function(...)

In principle I like that idea, but I don't know any case where I would have used it in the last years.

Issue History

Date Modified Username Field Change
2004-11-26 23:43 lars New Issue
2004-11-27 00:22 lars Relationship added related to 0000189
2009-10-27 07:42 zesstra Note Added: 0001559
2009-10-27 07:42 zesstra Status new => feedback
2011-02-24 00:00 Coogan Note Added: 0002028