Bug #8407

*args in method_missing not typing variables correctly

Added by Ryan Castro 11 months ago. Updated 11 months ago.

[ruby-core:54994]
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

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

History

#1 Updated by Matthew Kerwin 11 months 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

#2 Updated by Yukihiro Matsumoto 11 months ago

  • Status changed from Open to Rejected

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

Matz.

#3 Updated by Ryan Castro 11 months ago

Yes, I clearly did. And now, this morning, my error stands out like a sore thumb.

Sorry to waste time.

Also available in: Atom PDF