Argumentübergabe

Argumentübergabe

am 04.10.2006 09:55:32 von Frank Kulow

Hallo NG,

es gibt doch gewiß eine elegantere Möglichkeit in der "repeat"-Zeile das
Argument ($tmp) zu übergeben?! Ähnlich auskommentierter nicht laufender
Variante.

use strict;
use Tk;

sub g1
{
$_[0]->selectAll;
$_[0]->deleteSelected;
$_[0]->insert('0.0',time);
}

sub p1
{
my$mw = MainWindow->new;
my$tmp=$mw->Text()->pack();
$mw->repeat(500,sub{g1($tmp)});
#$mw->repeat(500,\&g1($tmp));
MainLoop;
}

p1();

Re: Argumentübergabe

am 04.10.2006 10:16:48 von Ch Lamprecht

Frank Kulow schrieb:
> Hallo NG,
>
> es gibt doch gewiß eine elegantere Möglichkeit in der "repeat"-Zeile das
> Argument ($tmp) zu übergeben?! Ähnlich auskommentierter nicht laufender
> Variante.
>
> use strict;
> use Tk;
>
> sub g1
> {
> $_[0]->selectAll;
> $_[0]->deleteSelected;
> $_[0]->insert('0.0',time);
> }
>
> sub p1
> {
> my$mw = MainWindow->new;
> my$tmp=$mw->Text()->pack();
> $mw->repeat(500,sub{g1($tmp)});
> #$mw->repeat(500,\&g1($tmp));
> MainLoop;
> }
>
> p1();

sub p1
{
my$mw = MainWindow->new;
my$tmp=$mw->Text()->pack();
my $time;
$mw->Label(-textvariable=>\$time)->pack;
$mw->repeat(500,sub{$time = time});
$mw->repeat(500,[\&g1,$tmp]);
MainLoop;
}

p1();


HTH, Christoph

--

perl -e "print scalar reverse q/ed.enilno@ergn.l.hc/"

Re: Argumentübergabe

am 04.10.2006 10:31:48 von Frank Kulow

> $mw->repeat(500,[\&g1,$tmp]);

danke, daß man die Argumente so in ein Array packen, kann war mir neu.



ps
> $mw->repeat(500,sub{$time = time});

die time Funktion war nur ein Dummy, damit im Beispiel in g1 etwas passiert.


Frank

Re: Argumentübergabe

am 04.10.2006 11:10:21 von struebig

Frank Kulow wrote:
>
> Hallo NG,
>
> es gibt doch gewiß eine elegantere Möglichkeit in der "repeat"-Zeile das
> Argument ($tmp) zu übergeben?! Ähnlich auskommentierter nicht laufender
> Variante.
>
> use strict;
> use Tk;
>
> sub g1
> {
> $_[0]->selectAll;
> $_[0]->deleteSelected;
> $_[0]->insert('0.0',time);
> }
>
> sub p1
> {
> my$mw = MainWindow->new;
> my$tmp=$mw->Text()->pack();
> $mw->repeat(500,sub{g1($tmp)});
> #$mw->repeat(500,\&g1($tmp));
> MainLoop;
> }
>
> p1();

Was stört dich an der Variante?

Du solltest vielleicht etwas größzügiger mit Leerzeichen sein, dass
macht den code lesbarer (vor allem zwischen my und dem $) und deine
Funktions- und Variabelnbezeichnungen sind nicht besonders
aussagekräftig, aber ansonsten sehe ich hier keine Probleme.

Struppi.

Re: Argumentübergabe

am 04.10.2006 13:33:32 von Ch Lamprecht

Frank Kulow schrieb:
>> $mw->repeat(500,[\&g1,$tmp]);
>
>
> danke, daß man die Argumente so in ein Array packen, kann war mir neu.
>
>
Es gibt dabei allerdings einen subtilen (oder vielleicht auch nicht so subtilen)
Unterschied im Verhalten :


use warnings;
use strict;
use Tk;

sub g1
{
$_[0]->selectAll;
$_[0]->deleteSelected;
$_[0]->insert('0.0',$_[1].time);
}

sub p1
{
my$mw = MainWindow->new;
my$tmp=$mw->Text()->pack(-side=>'left');
$mw->repeat(500,[\&g1,$tmp,'die eine Variante : ']);
$mw->repeat(500,sub{g1($tmp,'und die andere Variante : ')});

$tmp=$mw->Text()->pack(-side=>'left');

MainLoop;
}

p1();

Christoph
--

perl -e "print scalar reverse q/ed.enilno@ergn.l.hc/"

Re: Argumentübergabe

am 04.10.2006 21:34:20 von Slaven Rezic

Frank Kulow writes:

> > $mw->repeat(500,[\&g1,$tmp]);
>
> danke, daß man die Argumente so in ein Array packen, kann war mir neu.
>

Das ist Perl/Tk-spezifisch und wahrscheinlich noch ein Überbleibsel
aus den alten Perl4-Tagen bzw. eine relativ direkte Übersetzung des
Tcl-Pendants. In allgemeinen Perl-Code geht so etwas nicht.

Gruß,
Slaven

--
Slaven Rezic - slaven rezic de
BBBike - route planner for cyclists in Berlin
WWW version: http://www.bbbike.de
Perl/Tk version for Unix and Windows: http://bbbike.sourceforge.net