View Issue Details
ID | Project | Category | View Status | Date Submitted | Last Update |
---|---|---|---|---|---|
0000279 | LDMud | LPC Compiler/Preprocessor | public | 2004-11-26 23:43 | 2011-02-24 00:00 |
Reporter | Assigned To | ||||
Priority | normal | Severity | feature | Reproducibility | N/A |
Status | feedback | Resolution | open | ||
Summary | 0000279: Tuple return values | ||||
Description | Short: 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. | ||||
Tags | No tags attached. | ||||
External Data (URL) | |||||
related to | 0000189 | closed | Tuple datatype |
|
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. |
|
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. |