Schrift
[thread]12193[/thread]

sigil/twigil/... um Instanzvariablen zu Kennzeichnen (Ruby!,Perl6?)

Leser: 3


<< |< 1 2 >| >> 11 Einträge, 2 Seiten
KurtZ
 2008-07-16 18:39
#112211 #112211
User since
2007-12-13
411 Artikel
BenutzerIn
[default_avatar]
Hallo

was mich an Ruby sehr überzeugend finde, ist das man für Instanzvariablen ein eigenes Sigil hat, z.B. @instanz (OBACHT: das ist nicht notwendigerweise ein Array!).

Es würde den Methoden-Code in Perl sehr lesbar machen, wenn die ganzen $self-> wegfallen könnten.

Sehe ich das richtig dass das in Perl6 nicht vorgesehen ist?
Um sowas zu realisieren käme man an code-filtern nicht vorbei, oder?

Grüße
Kurt
TMTOWTDYOG (there's more than one way to dig your own grave)
KurtZ
 2008-07-16 18:46
#112212 #112212
User since
2007-12-13
411 Artikel
BenutzerIn
[default_avatar]
ahh vergesst es ... ich habe in der Perl6 Doku Klassen mit Instanzvariablen verwechselt. Die Twigils leisten ja genau das was ich will : )
TMTOWTDYOG (there's more than one way to dig your own grave)
moritz
 2008-07-16 18:59
#112213 #112213
User since
2007-05-11
923 Artikel
HausmeisterIn
[Homepage]
user image
Man braucht das self-zeugs in Perl 6 nur noch um auf private Methoden zuzugreifen:

Code: (dl )
1
2
3
4
5
6
7
8
9
class Foo {

my method bar {
....
}
method public_bar {
self!bar() if $I_trust_you
}
}
KurtZ
 2008-07-16 19:57
#112216 #112216
User since
2007-12-13
411 Artikel
BenutzerIn
[default_avatar]
moritz+2008-07-16 16:59:26--
Man braucht das self-zeugs in Perl 6 nur noch um auf private Methoden zuzugreifen:


Hmm, weißt du wieso nicht sowas wie !bar() oder &!bar vorgesehen ist?

Sind die Attribute jetzt eigentlich hinter den Kullissen immer Einträge eines geblessten Hashes %$self ?

NACHTRAG: Deine Siete Objektmodell beschreibt nur $., das geht aber auch Analog mit %. und @., oder?
TMTOWTDYOG (there's more than one way to dig your own grave)
moritz
 2008-07-16 20:05
#112217 #112217
User since
2007-05-11
923 Artikel
HausmeisterIn
[Homepage]
user image
KurtZ+2008-07-16 17:57:02--
Hmm, weißt du wieso nicht sowas wie !bar() oder &!bar vorgesehen ist?


prefix:<!> steht für Negation, das geht also nicht. Und Routinen werden generell nicht mehr mit prefix:<&> aufgerufen. Wenn wir eine bessere Syntax finden, die nicht mehrdeutig ist, und die auch nicht merkwürdig aussieht, könnte man ja probieren Larry zu überreden ;-)

Quote
Sind die Attribute jetzt eigentlich hinter den Kullissen immer Einträge des geblessten Hashes %$self ?


Es gibt keinen "blessed Hash" mehr (naja, eigentlich schon, aber keinen guten Grund damit zu arbeiten). Der Speicher ist austauschbar, und per default transparent für den Benutzer (so wie in Java, du weisst ja auch nicht in was für einer Datenstruktur die Attribute gespeichert sind). Das Default-Speicherdingsi heisst "P6opaque". Mehr dazu steht in S12.

Jedenfalls kommt man nicht mehr so leicht von aussen an "fremde" private Daten (man kann natürlich immer noch serialisieren und die Ausgabe parsen, aber das ist schon ein deutlich größeres Hindernis als früher).
KurtZ
 2008-07-16 20:26
#112219 #112219
User since
2007-12-13
411 Artikel
BenutzerIn
[default_avatar]
moritz+2008-07-16 18:05:06--
Wenn wir eine bessere Syntax finden, die nicht mehrdeutig ist, und die auch nicht merkwürdig aussieht, könnte man ja probieren Larry zu überreden ;-)


Also ich kennen die Konvention Bezeichner für private Methoden, Attribute mit einem '_' vorweg zu schreiben.

Das wäre dann allerdings ein Symbol aus dem erlaubten Zeichensatz für Identifier.

Um einen anderes Symbol zu finden muss man in Perl ansonsten massiv rochieren, weil alle Symbole aus 7bit ASCII irgendwo genutzt werden.

Anyway ich denke es ist eh zu spät für solche Änderungswünsche ...

PS: hast du meinen Nachtrag oben noch gesehen?
TMTOWTDYOG (there's more than one way to dig your own grave)
moritz
 2008-07-16 20:49
#112222 #112222
User since
2007-05-11
923 Artikel
HausmeisterIn
[Homepage]
user image
KurtZ+2008-07-16 18:26:14--
moritz+2008-07-16 18:05:06--
Wenn wir eine bessere Syntax finden, die nicht mehrdeutig ist, und die auch nicht merkwürdig aussieht, könnte man ja probieren Larry zu überreden ;-)


Also ich kennen die Konvention Bezeichner für private Methoden, Attribute mit einem '_' vorweg zu schreiben.

Das wäre dann allerdings ein Symbol aus dem erlaubten Zeichensatz für Identifier.


Und damit mehrdeutig.

Quote
Um einen anderes Symbol zu finden muss man in Perl ansonsten massiv rochieren, weil alle Symbole aus 7bit ASCII irgendwo genutzt werden.

Anyway ich denke es ist eh zu spät für solche Änderungswünsche ...


Nicht, wenn es nur das Einführen eines neuen Operators ist. Wenn man dadurch nicht viel kaputt macht sind solche Änderungen schon noch drin.

Quote
PS: hast du meinen Nachtrag oben noch gesehen?


hatte ich nicht. Die Antwort ist "ja". Ich muss das ganze Tutorial mal ein bisschen updaten, das hatte ich geschrieben als ich das Objektkmodell noch nicht so ganz verstanden hatte ;-)
KurtZ
 2008-07-16 21:08
#112223 #112223
User since
2007-12-13
411 Artikel
BenutzerIn
[default_avatar]
moritz+2008-07-16 18:49:55--
KurtZ+2008-07-16 18:26:14--
Das wäre dann allerdings ein Symbol aus dem erlaubten Zeichensatz für Identifier.

Und damit mehrdeutig.


Glaub ich dir, aber wo genau?

Es gibt Sprachen in denen _ nur in der Mitte von Variablen-Identifiern erlaubt sind, also sowas wie [a-zA-Z][a-zA-Z_]* , dass müsste natürlich so geändert werden.

ich weiß jetzt nicht wo man es bräuchte, außer um die Migration alten Codes zu vereinfachen.

_bar() und $_bar fänd ich intuitiver als $!bar.

Ein Nachteil wäre dass man den Programmieren wieder ein Ausdrucksmittel für Konventionen wegnähme.

moritz+2008-07-16 18:49:55--

Quote
PS: hast du meinen Nachtrag oben noch gesehen?


hatte ich nicht. Die Antwort ist "ja". Ich muss das ganze Tutorial mal ein bisschen updaten, das hatte ich geschrieben als ich das Objektkmodell noch nicht so ganz verstanden hatte ;-)

das ist das Praktische am Tutorialschreiben, irgendwann muss man es selbst begriffen haben ;-)
TMTOWTDYOG (there's more than one way to dig your own grave)
LanX-
 2008-07-17 01:10
#112229 #112229
User since
2008-07-15
1000 Artikel
BenutzerIn

user image
KurtZ+2008-07-16 16:39:28--
Um sowas zu realisieren käme man an code-filtern nicht vorbei, oder?


so in dieser Art?

Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#!/usr/bin/perl
package attribute;

use Filter::Simple sub {
        s/(\$|\@|\%)(\.)(\w+)/selfify($1,$2,$3)/xeg;
};

sub selfify {
        ($sigil,$twigil,$identifier)=@_;
        return "\$self->{$identifier}" if ($sigil eq '$');
        return "$sigil\{\$self\-\>\{$identifier\}\}" if $sigil eq '%' or $sigil eq '@';
}
1;

#!/usr/bin/perl

use attribute;


$self={
        scalar => "SCALAR",
        array  => ["ARRAY",],
        hash   => {"HASH",},

};

print '$.scalar: ',$.scalar,"\n";
print '@.array: ',@.array,"\n";
print '%.hash: ',%.hash,"\n";


aber ich glaube was gelesen zu haben von CPAN-Modulen die das zuverlässiger erledigen als mein Hack. :-)
moritz
 2008-07-17 01:32
#112230 #112230
User since
2007-05-11
923 Artikel
HausmeisterIn
[Homepage]
user image
Wir haben über Perl 6-code diskutiert, und danach sieht der Source-Filter nun wirklich nicht aus ;-)
<< |< 1 2 >| >> 11 Einträge, 2 Seiten



View all threads created 2008-07-16 18:39.