# ok, tvoje pitanje bilo je:
# Wondering if Ruby has something like obj.transform(:symbol_of_method).
# Eg quantity.transform(:to_i) would do quantity = quantity.to_i
# E sad:
# quantity je lokalna promenljiva. Ona pokazuje na neki objekat koji ima metodu to_i.
# ti hoćeš metodu koja će nad tim objektom izvršiti zadatu metodu, a rezultat smestiti nazad
# u istu promenljivu.
# Problem je što metode ne mogu da menjaju lokalne promenljive, jer promenljive u Rubiju nisu
# objekti (već samo imena, "drške" za objekte u memoriji). Dodelu uvek moraš da uradiš sam.
# Jedino što možeš da uradiš u tom smislu je da "wrappuješ" taj objekat u neki drugi, koji bi ga
# čuvao interno, i koji bi imao transform metodu o kojoj govoriš:
class VarWrapper
def initialize obj
@obj = obj
end
def transform sym
@obj = @obj.send sym
end
def to_s
"#{@obj} (#{@obj.class})"
end
end
# i onda:
s = '123'
w_s = VarWrapper.new s
puts w_s
w_s.transform :to_i
puts w_s
# Naravno, ako bi neko zaista i pravio ovu wrapper klasu, trebalo bi da je napravi od
# BlankSlate klase i da sve metode (osim transform) rutira automatski wrappovanom objektu
# pomoću method_missing. ;)
IyBvaywgdHZvamUgcGl0YW5qZSBiaWxvIGplOgoKIyBXb25kZXJpbmcgaWYgUnVieSBoYXMgc29tZXRoaW5nIGxpa2Ugb2JqLnRyYW5zZm9ybSg6c3ltYm9sX29mX21ldGhvZCkuCiMgRWcgcXVhbnRpdHkudHJhbnNmb3JtKDp0b19pKSB3b3VsZCBkbyBxdWFudGl0eSA9IHF1YW50aXR5LnRvX2kKCiMgRSBzYWQ6CiMgcXVhbnRpdHkgamUgbG9rYWxuYSBwcm9tZW5saml2YS4gT25hIHBva2F6dWplIG5hIG5la2kgb2JqZWthdCBrb2ppIGltYSBtZXRvZHUgdG9faS4KIyB0aSBob8SHZcWhIG1ldG9kdSBrb2phIMSHZSBuYWQgdGltIG9iamVrdG9tIGl6dnLFoWl0aSB6YWRhdHUgbWV0b2R1LCBhIHJlenVsdGF0IHNtZXN0aXRpIG5hemFkCiMgdSBpc3R1IHByb21lbmxqaXZ1LgoKIyBQcm9ibGVtIGplIMWhdG8gbWV0b2RlIG5lIG1vZ3UgZGEgbWVuamFqdSBsb2thbG5lIHByb21lbmxqaXZlLCBqZXIgcHJvbWVubGppdmUgdSBSdWJpanUgbmlzdQojIG9iamVrdGkgKHZlxIcgc2FtbyBpbWVuYSwgImRyxaFrZSIgemEgb2JqZWt0ZSB1IG1lbW9yaWppKS4gRG9kZWx1IHV2ZWsgbW9yYcWhIGRhIHVyYWRpxaEgc2FtLgoKIyBKZWRpbm8gxaF0byBtb8W+ZcWhIGRhIHVyYWRpxaEgdSB0b20gc21pc2x1IGplIGRhICJ3cmFwcHVqZcWhIiB0YWogb2JqZWthdCB1IG5la2kgZHJ1Z2ksIGtvamkgYmkgZ2EgCiMgxI11dmFvIGludGVybm8sIGkga29qaSBiaSBpbWFvIHRyYW5zZm9ybSBtZXRvZHUgbyBrb2pvaiBnb3ZvcmnFoToKCmNsYXNzIFZhcldyYXBwZXIKICBkZWYgaW5pdGlhbGl6ZSBvYmoKICAgIEBvYmogPSBvYmoKICBlbmQKCiAgZGVmIHRyYW5zZm9ybSBzeW0KICAgIEBvYmogPSBAb2JqLnNlbmQgc3ltCiAgZW5kCgogIGRlZiB0b19zCiAgICAiI3tAb2JqfSAoI3tAb2JqLmNsYXNzfSkiCiAgZW5kCmVuZAoKIyBpIG9uZGE6CgpzID0gJzEyMycKd19zID0gVmFyV3JhcHBlci5uZXcgcwpwdXRzIHdfcwp3X3MudHJhbnNmb3JtIDp0b19pCnB1dHMgd19zCgojIE5hcmF2bm8sIGFrbyBiaSBuZWtvIHphaXN0YSBpIHByYXZpbyBvdnUgd3JhcHBlciBrbGFzdSwgdHJlYmFsbyBiaSBkYSBqZSBuYXByYXZpIG9kCiMgQmxhbmtTbGF0ZSBrbGFzZSBpIGRhIHN2ZSBtZXRvZGUgKG9zaW0gdHJhbnNmb3JtKSBydXRpcmEgYXV0b21hdHNraSB3cmFwcG92YW5vbSBvYmpla3R1CiMgcG9tb8SHdSBtZXRob2RfbWlzc2luZy4gOyk=