fork download
  1. # ok, tvoje pitanje bilo je:
  2.  
  3. # Wondering if Ruby has something like obj.transform(:symbol_of_method).
  4. # Eg quantity.transform(:to_i) would do quantity = quantity.to_i
  5.  
  6. # E sad:
  7. # quantity je lokalna promenljiva. Ona pokazuje na neki objekat koji ima metodu to_i.
  8. # ti hoćeš metodu koja će nad tim objektom izvršiti zadatu metodu, a rezultat smestiti nazad
  9. # u istu promenljivu.
  10.  
  11. # Problem je što metode ne mogu da menjaju lokalne promenljive, jer promenljive u Rubiju nisu
  12. # objekti (već samo imena, "drške" za objekte u memoriji). Dodelu uvek moraš da uradiš sam.
  13.  
  14. # Jedino što možeš da uradiš u tom smislu je da "wrappuješ" taj objekat u neki drugi, koji bi ga
  15. # čuvao interno, i koji bi imao transform metodu o kojoj govoriš:
  16.  
  17. class VarWrapper
  18. def initialize obj
  19. @obj = obj
  20. end
  21.  
  22. def transform sym
  23. @obj = @obj.send sym
  24. end
  25.  
  26. def to_s
  27. "#{@obj} (#{@obj.class})"
  28. end
  29. end
  30.  
  31. # i onda:
  32.  
  33. s = '123'
  34. w_s = VarWrapper.new s
  35. puts w_s
  36. w_s.transform :to_i
  37. puts w_s
  38.  
  39. # Naravno, ako bi neko zaista i pravio ovu wrapper klasu, trebalo bi da je napravi od
  40. # BlankSlate klase i da sve metode (osim transform) rutira automatski wrappovanom objektu
  41. # pomoću method_missing. ;)
Success #stdin #stdout 0s 4760KB
stdin
Standard input is empty
stdout
123 (String)
123 (Fixnum)