Schrift
[thread]5945[/thread]

Fehlermeldung: Frag zu einer Fehlermeldung (Seite 2)



<< |< 1 2 >| >> 13 Einträge, 2 Seiten
Strat
 2003-12-03 15:59
#74211 #74211
User since
2003-08-04
5246 Artikel
ModeratorIn
[Homepage] [default_avatar]
[quote=Relais,03.12.2003, 14:48][quote=ptk,03.12.2003, 13:00]Genau genommen ist die Schreibweise absolut korrekt --- es ist einfach ein Zugriff auf ein Array-Slice mit genau einem Element. @array[0,1] is erlaubt, warum also nicht auch @array[0]?[/quote]
Nein, sie ist nicht korrekt, denn ein Array-Slice kommt im Listenkontext zurück, ein Array-Element im Skalaren kontext.[/quote]
Das ist wiederum nicht 100% korrekt ;-) es kommt nicht zurueck, sondern erzwingt an dieser Stelle einen Listenkontext (siehe meine Beispiele von oben), weswegen es doch korrekt ist. Man sollte lediglich warnings (oder -w) mitteilen, dass man dieses einzelne Listenelement mit Absicht im Listenkontext verwendet.
Normalerweise wird man @liste[1] oder so nicht brauchen; ich benoetige dieses Verhalten jedoch gelegentlich bei der Quellcodegenerierung zur Laufzeit, wenn nicht von vorneherein feststeht, ob da eine Liste von Indices ein oder mehrere Elemente beinhaltet.\n\n

<!--EDIT|Strat|1070459985-->
perl -le "s::*erlco'unaty.'.dk':e,y;*kn:ai;penmic;;print"
http://www.fabiani.net/
pq
 2003-12-03 16:36
#74212 #74212
User since
2003-08-04
12207 Artikel
Admin1
[Homepage]
user image
[quote=Relais,03.12.2003, 14:48]Nein, sie ist nicht korrekt, denn ein Array-Slice kommt im Listenkontext zurück, ein Array-Element im Skalaren kontext.[/quote]
was heisst hier "kommt im Listenkontext zurück"?
Quote
Wenn man also ein Array-Slice mit nur einem Element skalar evaluiert, so wäre das Ergebnis eigentlich immer 1 - die Anzahl der Elemente des Array-Slice.

was heisst hier "wäre"?
sei @array = qw(a b c);
das ergebnis von scalar @array[1] ist genau
dasselbe wie $array[1], nämlich "b".

und das ergebnis von scalar @array[1,2] ist nicht 2, sondern "c".
denn ein array-slice ist eine liste, und wenn man eine liste in skalaren
kontext setzt, ist es keine liste mehr, sondern liefert den letzten wert,
genau wie scalar qw(a b c) "c" liefert.
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem
Crian
 2003-12-03 17:06
#74213 #74213
User since
2003-08-04
5866 Artikel
ModeratorIn
[Homepage]
user image
[quote=Strat,03.12.2003, 14:46]In Perl5 steht immer das Zeichen davor, was da zurückgegeben werden soll (also $ bei einem skalaren Wert, @ bei einer Liste und % bei einem Hash). Bei Perl6 aendert sich dieses Verhalten; da wird immer das Zeichen geschrieben, was die Variable beinhaltet (man kann sich denken, das @ oder % gehoert fix zum Variablennamen und aendert sich von daher nie). Meiner Meinung nach ist das perl6-verhalten intuitiver (beim jetzigen Verhalten haben naemlich viele Anfaenger Probleme), wenngleich es fuer die Leute, die dieses Verhalten kapiert haben, doch eine kleine Umstellung sein wird[/quote]
Ja, das schätze ich genauso ein, am Anfang war es erstaunlich, dass man das Zeichen vor der Variablen dem "Rückgabewert" anpassen konnte und trotzdem eine skalare Variable $var neben einem Array @var verwenden konnte und Perl "schon weiß", was mit $var[42] gemeint ist...

Aber hat man sich daran ersteinmal gewöhnt, ist das sehr nett. Deshalb wird es eine Umstellung sein, wenn Perl 6 raus kommt, aber ich glaube, dass diese Umstellung bestimmt wohldurchdacht ist, insofern sollte man sich gedanklich nicht all zu sehr sträuben.
s--Pevna-;s.([a-z]).chr((ord($1)-84)%26+97).gee; s^([A-Z])^chr((ord($1)-52)%26+65)^gee;print;

use strict; use warnings; Link zu meiner Perlseite
<< |< 1 2 >| >> 13 Einträge, 2 Seiten



View all threads created 2003-12-03 12:49.