#!/usr/bin/env ruby
def is_ruby_pass_by_value?( foo)
foo << <<- HERE
More precisely, it is call- by- object- sharing!
Call- by- object- sharing is a special case of pass- by- value,
where the value is always an immutable pointer to a ( potentially mutable) value.
HERE
foo = 'No, Ruby is pass-by-reference.'
return
end
bar = [ 'Yes, of course, Ruby *is* pass-by-value!' ]
is_ruby_pass_by_value?( bar)
puts bar
# Yes, of course, Ruby *is* pass-by-value!,
# More precisely, it is call-by-object-sharing!
IyEvdXNyL2Jpbi9lbnYgcnVieQoKZGVmIGlzX3J1YnlfcGFzc19ieV92YWx1ZT8oZm9vKQogIGZvbyA8PCA8PC1IRVJFCiAgICBNb3JlIHByZWNpc2VseSwgaXQgaXMgY2FsbC1ieS1vYmplY3Qtc2hhcmluZyEKICAgIENhbGwtYnktb2JqZWN0LXNoYXJpbmcgaXMgYSBzcGVjaWFsIGNhc2Ugb2YgcGFzcy1ieS12YWx1ZSwgCiAgICB3aGVyZSB0aGUgdmFsdWUgaXMgYWx3YXlzIGFuIGltbXV0YWJsZSBwb2ludGVyIHRvIGEgKHBvdGVudGlhbGx5IG11dGFibGUpIHZhbHVlLgogIEhFUkUKICBmb28gPSAnTm8sIFJ1YnkgaXMgcGFzcy1ieS1yZWZlcmVuY2UuJwogIHJldHVybgplbmQKCmJhciA9IFsnWWVzLCBvZiBjb3Vyc2UsIFJ1YnkgKmlzKiBwYXNzLWJ5LXZhbHVlISddCgppc19ydWJ5X3Bhc3NfYnlfdmFsdWU/KGJhcikKCnB1dHMgYmFyCiMgWWVzLCBvZiBjb3Vyc2UsIFJ1YnkgKmlzKiBwYXNzLWJ5LXZhbHVlISwKIyBNb3JlIHByZWNpc2VseSwgaXQgaXMgY2FsbC1ieS1vYmplY3Qtc2hhcmluZyE=