Thread push (10 answers)
Opened by Gast at 2008-12-03 13:59

LanX-
 2008-12-05 12:43
#116836 #116836
User since
2008-07-15
1000 Artikel
BenutzerIn

user image
also die Diskussion hat ne überzeugende Antwort produziert, der Punkt scheint dass man bei Prototypes wie sub push(\@@) {} sonst nicht mehr unterscheiden könnte ob push ohne zwoten oder nur mit leerem zwoten parameter aufgerufen würde. [*]
Code (perl): (dl )
1
2
3
@b=();
push @a;       # kein zwoter parameter
push @a,@b; # zwoter para ist leere Liste

würde die zwote Form zu $_ defaulten bekäme man ganz hässliche Fehler!

Builtins wie print und split laufen jedoch nicht über diese prototype Schnittstelle und bekommen ne Sonderbehandlung, und sind deswegen auch nicht überschreibbar. Das sieht man daran das -f prototype hier undef ist.
Code (perl): (dl )
1
2
3
4
5
6
7
  DB<7> print prototype "CORE::push"
\@@

  DB<8> print prototype "CORE::print"


  DB<9> print prototype "CORE::split"


Wollte man das allgemeingültig lösen, müsste man das Prototype-Interface um Defaultoptionen erweitern. So wie es jetzt läuft könnte man nämlich auch push nicht fehlerfrei überschreiben! (beim Aufruf wird einfach ne abgeflache Liste übergeben, die ursprüngliche Zahl der Paras ist verloren, die Überprüfung müsste deswegen schon bei der Compilierung geschehen)

View full thread push