Schrift
[thread]11086[/thread]

scalar comma operator (Seite 2)



<< |< 1 2 3 >| >> 26 Einträge, 3 Seiten
lichtkind
 2008-01-09 00:08
#104511 #104511
User since
2004-03-22
5703 Artikel
ModeratorIn + EditorIn
[Homepage]
user image
klar, komma erzeugt in perl 6 automatisch ein array. so das:

Code: (dl )
$a = 2,3,4;


$a zu einer arrayreferenz wird. wenn du wirklich nur das letzte ergebnis willst trenn die ausdrücke mit ";" :)
Wiki:Tutorien in der Wiki, mein zeug:
kephra, baumhaus, garten, gezwitscher

Es beginnt immer mit einer Entscheidung.
KurtZ
 2008-01-09 17:25
#104547 #104547
User since
2007-12-13
411 Artikel
BenutzerIn
[default_avatar]
lichtkind+2008-01-08 23:08:55--
klar, komma erzeugt in perl 6 automatisch ein array. so das:

Code: (dl )
$a = 2,3,4;


$a zu einer arrayreferenz wird. wenn du wirklich nur das letzte ergebnis willst trenn die ausdrücke mit ";" :)


Jetzt sag mir bitte dass man noch klammern darf

und heißt das (2,3,4) ergibt wie [2,3,4] eine Referenz???

Grüße
Kurt

PS: Bitte, wo hast du das nachgelesen?
TMTOWTDYOG (there's more than one way to dig your own grave)
pq
 2008-01-09 17:40
#104549 #104549
User since
2003-08-04
12209 Artikel
Admin1
[Homepage]
user image
lichtkind+2008-01-08 23:08:55--
klar, komma erzeugt in perl 6 automatisch ein array. so das:

Code: (dl )
$a = 2,3,4;


$a zu einer arrayreferenz wird. wenn du wirklich nur das letzte ergebnis willst trenn die ausdrücke mit ";" :)

dann macht pugs 6.2.13 das noch falsch...
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
lichtkind
 2008-01-09 18:59
#104551 #104551
User since
2004-03-22
5703 Artikel
ModeratorIn + EditorIn
[Homepage]
user image
nachlesen kannst du alles bei uns im tutorial oder in den synopsen auf:

http://dev.perl.org/perl6/doc/design/syn

natürlich kann man in perl 6 noch klammern. aber klammern gruppieren halt nur noch, was besonders bei unterscheidungen bei verschachtelungen wichtig ist.

aber richtig 2,3,4 ist das selbe wie [2,3,6] und das schöne an perl 6 ist auch das 2,3,@a endlich tut was es soll, weil arrays nur in wenigen ausnahmen autflattening ausführen und auch per default lazy eval kontext haben. dies alles und viel mehr in meinem nächsten artikel mai in der foo :).
Wiki:Tutorien in der Wiki, mein zeug:
kephra, baumhaus, garten, gezwitscher

Es beginnt immer mit einer Entscheidung.
KurtZ
 2008-01-10 19:23
#104572 #104572
User since
2007-12-13
411 Artikel
BenutzerIn
[default_avatar]
lichtkind+2008-01-09 17:59:56--
aber richtig 2,3,4 ist das selbe wie [2,3,6] und das schöne an perl 6 ist auch das 2,3,@a endlich tut was es soll, weil arrays nur in wenigen ausnahmen autflattening ausführen und auch per default lazy eval kontext haben.


verstehe ich das richtig -> Synopse 02 Literale Listen ???

$a=(1,2,(a,b)); # 2 "dimensionale" Struktur, kein flattening

@a=(1,2,(a,b)); # 1 dimensionale Struktur wg autoflattening?

wenn scalar (...) identisch zu [...] ist, brauch ich die eckigen dann um explizit autoflattening zu vermeiden?

Und wenn links keine Zuweisung steht, bleibt dann "," als "junior ;" erhalten um Codeblöcke (ohne eigenen Scope) zu unterteilen?

Gruß
Kurt
TMTOWTDYOG (there's more than one way to dig your own grave)
lichtkind
 2008-01-10 22:20
#104593 #104593
User since
2004-03-22
5703 Artikel
ModeratorIn + EditorIn
[Homepage]
user image
ich kann dir nicht alles beantworten. du kannst fragen an die p6l liste oder im IRC freenode#perl6 stellen.

[ .. ] erzeugt halt immer ne array ref. und deine beiden beispiele machen keinen unterschied. (hab eben larry gefragt :))
Wiki:Tutorien in der Wiki, mein zeug:
kephra, baumhaus, garten, gezwitscher

Es beginnt immer mit einer Entscheidung.
KurtZ
 2008-01-11 03:03
#104603 #104603
User since
2007-12-13
411 Artikel
BenutzerIn
[default_avatar]
lichtkind+2008-01-10 21:20:10--
... und deine beiden beispiele machen keinen unterschied. (hab eben larry gefragt :))


ach ja? (nur um sicher zu gehen ... das eine war ein arr_reff das andere ein array um den Kontext zu ändern)

$a=(1,2,(a,b)); # 2 "dimensionale" Struktur, kein flattening ???
@a=(1,2,(a,b)); # 1 dimensionale Struktur wg autoflattening ???

Aber was hat Larry genau gesagt : beide sind flach?
TMTOWTDYOG (there's more than one way to dig your own grave)
lichtkind
 2008-01-11 03:21
#104604 #104604
User since
2004-03-22
5703 Artikel
ModeratorIn + EditorIn
[Homepage]
user image
soweit ich das verstehe ja.

und ja beides kannst du in perl gleich behandeln.
Wiki:Tutorien in der Wiki, mein zeug:
kephra, baumhaus, garten, gezwitscher

Es beginnt immer mit einer Entscheidung.
betterworld
 2008-01-11 20:49
#104634 #104634
User since
2003-08-21
2614 Artikel
ModeratorIn

user image
Eine Möglichkeit, den Komma-Operator zu benutzen, wobei auch sein Rueckgabewert gebraucht wird, ist ein Konstrukt wie etwa das folgende:
Code (perl): (dl )
1
2
3
while (--$i, --$j) {
   ...
}

Mir fällt jetzt nur gerade keine sinnvolle Anwendung dafür ein. Man kann es natürlich in fast allen Fällen auch irgendwie anders schreiben, sieht allerdings nicht immer schön aus:
Code (perl): (dl )
1
2
3
4
5
--$i;
while (--$j) {
   ...
   --$i;
}


do{} würde hier ebenfalls nicht gut aussehen.
KurtZ
 2008-01-13 21:27
#104676 #104676
User since
2007-12-13
411 Artikel
BenutzerIn
[default_avatar]
Hallo betterworld,

betterworld+2008-01-11 19:49:26--
Eine Möglichkeit, den Komma-Operator zu benutzen, wobei auch sein Rueckgabewert gebraucht wird, ist ein Konstrukt wie etwa das folgende:
Code (perl): (dl )
1
2
3
while (--$i, --$j) {
   ...
}


...

do{} würde hier ebenfalls nicht gut aussehen.


danke das ist ein schönes Beispiel, man hätte also die Möglichkeit folgendes zu schreiben

Code (perl): (dl )
1
2
3
4
5
$if=1;
while ($if) {
   ...
 $if=(--$i, --$j);
}


aber ohne Perl5-Bashing betreiben zu wollen, aber ich glaube der Einsatz der Klammern [...]und {...} wurde syntaktisch einiges verschenkt, man hätte

{...} für Codeblöcke reservieren können (ohne do und immer mit ";" getrennt)
und Referenzen mit einem eigenen Operator vor den (...) realisieren können, also sowas wie
$arr_ref=\(...);
$hash_ref=\[...];

naja zu spät

Bye
Kurt
TMTOWTDYOG (there's more than one way to dig your own grave)
<< |< 1 2 3 >| >> 26 Einträge, 3 Seiten



View all threads created 2008-12-31 02:05.