/ Forside / Teknologi / Udvikling / Perl / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
Perl
#NavnPoint
bjarneA 141
poul_from 50
soccer 30
Nicknack 14
Tmpj 0
sub foo (&@) { ... }
Fra : Peter Makholm


Dato : 11-12-00 14:47

Jeg sad og legede lidt med prototyper, da jeg skulle skrive sslugs
julekalendergave til den tiende.
<URL:http://www.sslug.dk/julekalender/10.php3>

Jeg laver en funktion der ser således ud:

sub pred (&@) {
$test = shift @_;
my @result = ();

while ($_ = shift @_) {
if (&$test) { push @result, $_}
}

@result
}

(Ok, måske ikke lige den kønneste implementation, men den virker.)

Alt er skønt hvis jeg kalder den med navngivne lister:

@foo = (1, 2, 44, 65, 88, 99, 12);
@bar = pred { !($_ % 2) } @foo;

Følgende virker også:

@bar = pred { !($_ % 2) } 1, 2, 44, 65, 88, 99, 12;

Men jeg mener at dette formelt er i strid med prototypningen og vil
gerne skrive noget ala følgende:

@bar = pred { !($_ % 2) } (1, 2, 44, 65, 88, 99, 12);

Men uanset hvordan jeg gør får jeg en fejl:

berling% perl test.pl
Type of arg 1 to main::pred must be block (not list) at test.pl line 12, near ");"
Execution of test.pl aborted due to compilation errors.

Hvorf'?
--
"If I had been brought up in a different time [...] perhaps I'd
be totally comfortable in ML and would find C unsafe, a little
dangerous, not very expressive." - Brian Kernighan


 
 
Adam Sjøgren (11-12-2000)
Kommentar
Fra : Adam Sjøgren


Dato : 11-12-00 14:51

On 11 Dec 2000 14:46:50 +0100, Peter Makholm wrote:

> Men jeg mener at dette formelt er i strid med prototypningen og vil
> gerne skrive noget ala følgende:

> @bar = pred { !($_ % 2) } (1, 2, 44, 65, 88, 99, 12);

> Men uanset hvordan jeg gør får jeg en fejl:

Hvad sker der hvis du skriver [1, 2, 44...] i stedet?


Mvh.

--
"To tell the truth, I don't know how Linus and his Adam Sjøgren
merry band manage so well" asjo@koldfront.dk

Peter Makholm (11-12-2000)
Kommentar
Fra : Peter Makholm


Dato : 11-12-00 15:07

asjo@koldfront.dk (Adam Sjøgren) writes:

> Hvad sker der hvis du skriver [1, 2, 44...] i stedet?

Jamen, så får min pred-funktion kodeblokken og en reference til
listen og returnerer formodentligt bare denne reference eller den
tomme liste alt efter hvad kodeblokken vil gøre med en reference.

(Ja, jeg kunne jo selvfølgelig skrive pred om, og det ville måske være
det mest naturlige, så funktionen virkede in-place.)

--
"If I had been brought up in a different time [...] perhaps I'd
be totally comfortable in ML and would find C unsafe, a little
dangerous, not very expressive." - Brian Kernighan


Adam Sjøgren (11-12-2000)
Kommentar
Fra : Adam Sjøgren


Dato : 11-12-00 15:44

On 11 Dec 2000 15:06:56 +0100, Peter Makholm wrote:

> asjo@koldfront.dk (Adam Sjøgren) writes:
>> Hvad sker der hvis du skriver [1, 2, 44...] i stedet?

> Jamen, [...]

Uhh, mit svar var et af de typiske "gør/prøv-uden-at-tænke/læse"
-svar.

Sorry.

Mvh.

--
"heksaeder -> heksaeder -> heksæder" Adam Sjøgren
asjo@koldfront.dk

Søg
Reklame
Statistik
Spørgsmål : 177547
Tips : 31968
Nyheder : 719565
Indlæg : 6408797
Brugere : 218887

Månedens bedste
Årets bedste
Sidste års bedste