Issue #8407 has been updated by matz (Yukihiro Matsumoto).

Status changed from Open to Rejected

As, Matthew said, you misunderstand how '*' works.

Matz.


----------------------------------------
Bug #8407: *args in method_missing not typing variables correctly
https://bugs.ruby-lang.org/issues/8407#change-39342

Author: rcastro (Ryan Castro)
Status: Rejected
Priority: Normal
Assignee: 
Category: 
Target version: 
ruby -v: ruby 2.0.0p0 (2013-02-24) [i386-mingw32]
Backport: 1.9.3: UNKNOWN, 2.0.0: UNKNOWN


When setting a variable with *args, it will not cast my string to a string type. But when used directly, it casts it as a String without issue.

I would expect it to operate like a normally array does, as demonstrated at the end of the code sample.

:


class Klass

  def method_missing(sym, *args, &block)
    puts *args[0].inspect # I am a string
    puts *args[0].class # I am a string
    mystring = *args[0]
    puts mystring.class # I am an array!
    again = *args[0][0]
    puts again.class # I am still an array!
  end
end

a = Klass.new

a.doThings("AmIAString?")

#And now, an array that doesn't use the "splat" {*} operator:
c = []
c[0] = "a"
d = c[0]
puts d.class #String



-- 
http://bugs.ruby-lang.org/