Project

General

Profile

Actions

Bug #8407

closed

*args in method_missing not typing variables correctly

Added by rcastro (Ryan Castro) almost 11 years ago. Updated almost 11 years ago.

Status:
Rejected
Assignee:
-
Target version:
-
ruby -v:
ruby 2.0.0p0 (2013-02-24) [i386-mingw32]
[ruby-core:54994]

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.

Actions

Also available in: Atom PDF

Like0
Like0Like0Like0