Schrift
[thread]6417[/thread]

Was ist eigentlich ein LVALUE?: Seltsamer Rückgabewert von ref

Leser: 2


<< |< 1 2 >| >> 19 Einträge, 2 Seiten
murphy
 2004-07-20 20:20
#84646 #84646
User since
2004-07-19
1776 Artikel
HausmeisterIn
[Homepage]
user image
Ich hatte gerade die perldoc Seite zu ref gelesen und stellte mit erstaunen fest, dass perl anscheinend Referenzen auf "LVALUE"s kennt. Es ist mir nur schleierhaft was genau das ist.
Ich kenne die Bezeichnung "LVALUE" für eine Speicherstelle oder einen Ausdruck, dem man einen Wert zuweisen kann -- aber dann wäre ja auch eine Skalarreferenz eine Referenz auf einen "LVALUE".
Weiß da jemand etwas genaueres?\n\n

<!--EDIT|murphy|1090340580-->
When C++ is your hammer, every problem looks like your thumb.
esskar
 2004-07-20 20:38
#84647 #84647
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
bin mir nicht sicher, aber ich hab folgendes unter diesem begriff mal gelernt:

stell dir eine Variable wie ein Wurst vor.
Du hast ein linkes Ende (LVALUE) und ein rechtes Ende (RVALUE)

von der linken Seite kannst du was lesen; an die rechte Seite kannst du was schreiben/anhängen


natürlich haben auch ausdrücke L- und RVALUES

bsp:
Code: (dl )
$text = "Hallo";


dabei ist "$text" jetzt - da es auf der linken seite von "=" steht - ein LVALUE; ""Hallo"" ist dementsprechend ein RVALUE
kabel
 2004-07-20 20:45
#84648 #84648
User since
2003-08-04
704 Artikel
BenutzerIn
[default_avatar]
also nach mstone's M-OPT series bei den monks
ist eine variable "etwas", dem man bei der definition einen wert geben kann.
dann bleibt dieser aufgrund der sog. "referential transparency" bestehen.
lvalues hingegen können ihren wert ändern.
also ist alles, was du links von einem = zeichen schreiben kannst, ein lvalue in perl.
-- stefan
murphy
 2004-07-20 20:51
#84649 #84649
User since
2004-07-19
1776 Artikel
HausmeisterIn
[Homepage]
user image
Das ist ja im Prinzip das, was ich auch denke: Jeder Ausdruck, dem man einen Wert zuweisen kann, ist ein LVALUE. Es bleibt aber doch die Frage, wie man eine Referenz auf solch ein Objekt erzeugt! Ich probiere gerade etwas herum, habe aber bisher keinen Erfolg dabei.
When C++ is your hammer, every problem looks like your thumb.
ptk
 2004-07-20 21:04
#84650 #84650
User since
2003-11-28
3645 Artikel
ModeratorIn
[default_avatar]
Versuch mal
Code: (dl )
warn \substr("bla", 0,1);
murphy
 2004-07-20 21:12
#84651 #84651
User since
2004-07-19
1776 Artikel
HausmeisterIn
[Homepage]
user image
Aha! Danke für den Tip! Dann glaube ich, ich hab's verstanden. Dieser "Datentyp" LVALUE wird von Perl also nur benötigt, um Teile eines Skalars, in die man aber dennoch schreiben kann, zu referenzieren.
Denn in jedem anderen Fall kann das Ziel einer Schreiboperation ja als Skalar, Arrayslice, usw. angesehen werden und das spiegelt sich dann auch in einem entsprechenden Referenztyp wieder.
When C++ is your hammer, every problem looks like your thumb.
ptk
 2004-07-20 21:30
#84652 #84652
User since
2003-11-28
3645 Artikel
ModeratorIn
[default_avatar]
Ich habe noch zwei:
Code: (dl )
1
2
warn \pos();
warn \vec("",0,1);
betterworld
 2004-07-20 21:31
#84653 #84653
User since
2003-08-21
2613 Artikel
ModeratorIn

user image
Aber was nicht geht, ist:
Code: (dl )
1
2
3
4
5
my $var;
sub aenderbar : lvalue {
$var;
}
print \aenderbar();
\n\n

<!--EDIT|betterworld|1090344786-->
murphy
 2004-07-20 21:35
#84654 #84654
User since
2004-07-19
1776 Artikel
HausmeisterIn
[Homepage]
user image
Das hatte ich auch schon probiert. Aber gab's nicht eine Möglichkeit, "Variablen" einzurichten, bei denen an Stelle einer Wertzuweisung irgendein Subroutinenaufruf erfolgt? Wenn man darauf dann eine Referenz nimmt, müsste -- rein von der Logik her -- auch ein LVALUE herauskommen, oder?
When C++ is your hammer, every problem looks like your thumb.
betterworld
 2004-07-20 21:38
#84655 #84655
User since
2003-08-21
2613 Artikel
ModeratorIn

user image
[quote=murphy,20.07.2004, 19:35]Das hatte ich auch schon probiert. Aber gab's nicht eine Möglichkeit, "Variablen" einzurichten, bei denen an Stelle einer Wertzuweisung irgendein Subroutinenaufruf erfolgt? Wenn man darauf dann eine Referenz nimmt, müsste -- rein von der Logik her -- auch ein LVALUE herauskommen, oder?[/quote]
Ja, mit tie().
<< |< 1 2 >| >> 19 Einträge, 2 Seiten



View all threads created 2004-07-20 20:20.