Sziasztok,
Mikor Ruby kódot futtatok az eval() funkcióval (ez ugye szöveget értelmez Ruby kódként), akkor az eval() meghívása előtt defniálnom kell bizonyos require hívásokat az értelmezett kódból, de nem mindegyiket.
Azt most hagyjuk hogy miért akarom megetetni a kódot az eval()-lal.
Futtassuk az alábbi szöveget eval-lal:
eval "require 'resolv'; require 'json'; puts 5**5"
Habár ez nem ad hibát, és nem is tudom reprodukálni a saját kódomnál lévő problémát, általában némelyik require-t be kell tenni az eval futtatása elé. De nem mindegyiket.
(Az eredeti kódot nem adhatom ki, illetve hatalmas a kódbázis és nincs idő lenyomozni hogy milyen kombinációban nem adna hibát az eval.)
Ha viszont így futtatom, akkor jó:
require 'resolv'
eval "require 'resolv'; require 'json'; puts 5**5"
Körülbelül 15 require-t használok az eredeti kódban, és pont hogy beépítettekre dob hibát, nem pedig külső gem-ként telepítettre.
Vajon miért lehet ez? Miért kell bizonyos require-t (2-t a 15-ből) definiálnom az eval előtt és miért pont azt?
A hibaüzenet az eval() futtatásakor ez:
http://paste.ubuntu.com/23223835/
Egy másik kérdésem, amiből a fenti következik. Erre valakinek ötlet?
https://www.ruby-forum.com/topic/6879045
Nincs valami pipe megoldás, amivel a string-et úgy tudnám kiszolgálni mintha fájl lenne?
Köszi.