Fórum Root.cz
Ostatní => /dev/null => Téma založeno: Ħαℓ₸℮ℵ ␏⫢ ⦚ » 23. 04. 2020, 00:53:46
-
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 heuristicky odhaduje (http://ruby-doc.com/docs/ProgrammingRuby/html/language.html) 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 (http://ruby-doc.com/docs/ProgrammingRuby/html/tut_expressions.html#S5) 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ů (http://ruby-doc.com/docs/ProgrammingRuby/html/ref_m_kernel.html#Kernel.print)se chová jako print ($_)
Nakonec jsem se to dočetl (http://ruby-doc.com/docs/ProgrammingRuby/) .
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)?
-
Na použití globálních proměnných není nic magického. Úplně stejnou globální proměnnou se stejným významem má Perl, má je i standardní knihovna pro C (errno). Seznam globálních proměnných pro Ruby máte zde: Ruby user's guide: Global variables (https://ruby-doc.org/docs/ruby-doc-bundle/UsersGuide/rg/globalvars.html).
Disclaimer: V Ruby jsem nikdy nenapsal ani čárku. Akorát znám magický web www.google.com.
-
implicitni matchovani regexu v podmince magicke je.
seznam specialnich promenych https://ruby-doc.org/docs/ruby-doc-bundle/Manual/man-1.4/variable.html
-
proc je to v kategorii /dev/null?
-
proc je to v kategorii /dev/null?
Protože (https://forum.root.cz/index.php?topic=22835.msg328438#msg328438) Pivotal věčně tapetuje fórum dotazy, na které by odpověď zjistil sám v průměru do pěti minut, kdyby tomu ten čas věnoval. Jenže on prostě místo Googlu používá zdejší fórum.
-
proc je to v kategorii /dev/null?
Protože (https://forum.root.cz/index.php?topic=22835.msg328438#msg328438) Pivotal věčně tapetuje fórum dotazy, na které by odpověď zjistil sám v průměru do pěti minut, kdyby tomu ten čas věnoval. Jenže on prostě místo Googlu používá zdejší fórum.
tohle mohla být zajímavá diskuze. Speciální proměnné v Ruby nejsou dobře zdokumentované. Osobně neznám seznam funkcí ze standardní knihovny, které pracují s $_
-
tohle mohla být zajímavá diskuze. Speciální proměnné v Ruby nejsou dobře zdokumentované. Osobně neznám seznam funkcí ze standardní knihovny, které pracují s $_
Čím jsou podle vás speciální? Podle mne jsou to normální globální proměnné.
K čemu by takový seznam byl dobrý? Někdy řešíte problém, že máte vstup a přemýšlíte, co by se s ním asi tak dalo dělat? Podle mne je to opačně – máte konkrétní problém, ke kterému jste našel vhodnou metodu, a u té metody už máte zdokumentováno, jaké vstupy ta metoda používá.
-
tohle mohla být zajímavá diskuze. Speciální proměnné v Ruby nejsou dobře zdokumentované. Osobně neznám seznam funkcí ze standardní knihovny, které pracují s $_
Čím jsou podle vás speciální? Podle mne jsou to normální globální proměnné.
nazvoslovi z perlu https://perldoc.perl.org/perlvar.html#SPECIAL-VARIABLES
K čemu by takový seznam byl dobrý? Někdy řešíte problém, že máte vstup a přemýšlíte, co by se s ním asi tak dalo dělat? Podle mne je to opačně – máte konkrétní problém, ke kterému jste našel vhodnou metodu, a u té metody už máte zdokumentováno, jaké vstupy ta metoda používá.
protoze neni na prvni pohled ze signatury videt, jestli dana funkce pracuje s $_, je dobre si to pamatovat, alespon u bezne pouzivanych funkci