Vlákno názorů k článku Perličky: datové struktury a I/O reference od Petr - Neni ten priklad s print_tree trochu "unperlish"? Chci rict:...

  • Článek je starý, nové názory již nelze přidávat.
  • 7. 3. 2008 19:30

    Petr (neregistrovaný)
    Neni ten priklad s print_tree trochu "unperlish"?

    Chci rict: Pokud si muzu pro "print" vybrat mezi
    print "some string";
    a
    print $out "some string";
    tak bych ocekaval, ze funkce print_tree se bude chovat se stejnout semantikou, tj. ze volam bud
    print_tree $cur_elem, $recursion_lvl, $enum_label;
    nebo
    print_tree $out $cur_elem, $recursion_lvl, $enum_label;
    Clanek jen ukazuje, jak udelat
    print_tree $out, $cur_elem, $recursion_lvl, $enum_label;
    ale to je neco jineho a vypada to neperlovsky...
  • 7. 3. 2008 21:02

    Michal Svoboda

    Vlastne by se ta funkce print_tree mela volat takto:

    print_tree($out, $cur_elem, $recursion_lvl, $enum_label);
    

    (Nejsem moc velkym priznivcem volani fci bez zavorek.) Nicmene dalo by se to upravit tak, aby bylo mozno ji zavolat s nebo bez toho $out a sice ze bychom testovali zda prvni argument je reference na IO nebo ne. Mne to prislo pro tento priklad zbytecne.

    Zbytecne to bude mozna i celkove, jelikoz pokud bych chtel tisknout na STDOUT, tak si tam tu referenci predam. Na druhou stranu kdybych chtel naznacit, ze nektere argumenty jsou volitelne, udelal bych funkci tak abychom ji mohli volat pomoci pojmenovanych parametru a pak bychom mohli vynechat i "inicializacni hodnoty", tj. print_tree(out => $neco) nebo print_tree().

    Co se tyce vynechane carky po $out a zejmena moznost ze to tam muze a nemusi bejt (ala print), tak pokud mi neco neuniklo tak to nejak jednoduse zaridit nejde (ci snad vubec). Maximalne muzeme pomoci prototypovani dosahnout funkce ktera se chova podobne jako preddefinovane map nebo grep, cili ve stylu moje_f { neconeco } argumenty. Pokud se mylim, tak me prosim nekdo opravte.

  • 10. 3. 2008 19:10

    Petr (neregistrovaný)
    To jsem se prave chtel dozvedet, jak to je :-)

    Nejasne si vzpominam, ze
    print $out "nejaky string"
    je v podstate syntakticky cukr pro
    $out->print("nejaky string")
    ale ruku do ohne bych za to nedal. A chtel jsem postouchnout, abych se to doopravdy dozvedel :-)
  • 11. 3. 2008 7:17

    Michal Svoboda

    neni to uplne presne.

    $out->print("ahoj") je syntakticky cukr pro IO::neco::print($out, "ahoj"), pricemz IO::neco je potomek tridy IO::Handle, napriklad IO::File. navic to $out musi byt vytvoreno pomoci toho modulu a ne klasickeho open. je to jakoby "objektovy" pristup k I/O.

    zabudovanej print s tim nema nic spolecneho, navic ta absence carky za filehandle je tak trochu syntakticky hack.