I am used to Ruby being a rather reflective language that gives carte
blanche to the programmer. So I found this rather surprising:
Marshal.dump binding
TypeError: no marshal_dump is defined for class Binding
Whaa?
Binding.new
NoMethodError: undefined method `new' for Binding:Class
Huh?
binding.methods(false)
=> []
You're kidding me, right?
I would expect you to be able to do all of the above. In addition to that,
it's sure be nice to do some of the following:
Binding.new :a => 1, :b => 2, :c =>3
=> #<Binding:0x1018130b0> # new binding object with the given variables
bound
binding.to_hash
=> {:a => 1, :b => 2, :c => 3} # Bound variables, as a hash
binding.to_yaml
=> "--- !ruby/object:Binding \na: 1\nb: 2\nc: 3\n" # YAML dump of a Binding
object
And hey, maybe Binding#inspect could give a little more information than its
object_id?
Canned responses to apologists:
= Why do you want to do that?
I don't know, why should you be able to redefine Integer#+?
= No really, why do you want to do that?
I would like to implement a remote REPL with a stateless Ruby server and a
non-Ruby client
= Just use DRb!
I am really not wanting to open up an addition port just for DRb nor pursue
solutions which involve a non-Ruby client talking the DRb protocol.
Embedding some form of Ruby interpreter client side is not an option.
Props to Rubinius for fixing some of these problems!
irb(main):001:0> Binding.new
=> #<Binding:0x2e0>
Yay! A clean binding!
Marshal.dump Binding.new
=> "\004\bo:\fBinding\000"
Amazing!
···
--
Tony Arcieri
Medioh! A Kudelski Brand