Bug #8407
closed*args in method_missing not typing variables correctly
Description
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
Updated by phluid61 (Matthew Kerwin) almost 11 years ago
=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
Updated by matz (Yukihiro Matsumoto) almost 11 years ago
- Status changed from Open to Rejected
As, Matthew said, you misunderstand how '*' works.
Matz.
Updated by rcastro (Ryan Castro) almost 11 years ago
Yes, I clearly did. And now, this morning, my error stands out like a sore thumb.
Sorry to waste time.