V ruby jsou některé věci, na které člověk kouká jako puk, protože je to ohebný jazyk , má magické proměnné a heur
isticky
odhaduje zda slovo je proměnná nebo metoda ()... Zároveň úžasný...
U tohoto příkladu by mě zajímalo pár věcí. Striktně bych zde čekal, že (podmíněné)výrazy typu
next if /regex/ znamenají provést next pokud /regex/ přetypovaný na bool je true. Zde jazyk jde dál, a nějak nepochopitelně
magicky proběhne test zadaného textu (na to, že gets
magicky uloží vstup do proměnné
$_ jsem si zvykl) na pattern. Jenže Nejenže zde není $_, ale není zde ani ~= , === nebo .match volání.
Zapadá zde do toho nějak
case equality operátor?
Proč stačí zapsat pouze regex a o
while gets
next if /^\s*#/ # skip comments
break if /^END/ # stop at end
# substitute stuff in backticks and try again
redo if gsub!(/`(.*?)`/) { eval($1) }
# process line ...
while gets # assigns line to $_
if /Ruby/ # matches against $_
print # prints $_
end
end
end
Nebo že
print bez argumentů se chová jako print ($_)
Nakonec jsem se to
dočetl .
he gets routine has a side effect: as well as returning the line just read, it also stores it into the global variable $_. This variable is special, in that it is used as the default argument in many circumstances. If you call print with no argument, it prints the contents of $_. If you write an if or while statement with just a regular expression as the condition, that expression is matched against $_.
dají se tyhle "rebarbative barbarismy" najít pohromadě nebo v referenční příručce (dokumentaci tříd)/ manuálu) ? Aby ty WTF momenty člověk si nějak objasnil, našel vysvětlení
Nebo se prostě spokojit s tím, že tahle magie je roztroušená po celém jazyce a občas i zdokumentovaná na nějaké stráce z 800 (viz citace výše)?