Issue #8407 has been updated by phluid61 (Matthew Kerwin).


=begin
Why do you keep referring to *args[0] in your code?  I suspect the following is what you meant:

 class Klass
    def method_missing(sym, *args, &block)
     puts args[0].inspect
     puts args[0].class
     mystring = args[0]
     puts mystring.class
   end
 end
 
 a = Klass.new
 a.doThings("AmIAString?")

Unless you're explicitly referring to an issue around splatting a non-array?

Compare:
  x = *'a' #=> ['a']
  y = 'a'  #=> 'a'
=end

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

Author: rcastro (Ryan Castro)
Status: Open
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/