From: "phluid61 (Matthew Kerwin)" Date: 2013-05-15T07:55:21+09:00 Subject: [ruby-core:54995] [ruby-trunk - Bug #8407] *args in method_missing not typing variables correctly 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/