[#5218] Ruby Book Eng tl, ch1 question — Jon Babcock <jon@...>

13 messages 2000/10/02

[#5404] Object.foo, setters and so on — "Hal E. Fulton" <hal9000@...>

OK, here is what I think I know.

14 messages 2000/10/11

[#5425] Ruby Book Eng. tl, 9.8.11 -- seishitsu ? — Jon Babcock <jon@...>

18 messages 2000/10/11
[#5427] RE: Ruby Book Eng. tl, 9.8.11 -- seishitsu ? — OZAWA -Crouton- Sakuro <crouton@...> 2000/10/11

At Thu, 12 Oct 2000 03:49:46 +0900,

[#5429] Re: Ruby Book Eng. tl, 9.8.11 -- seishitsu ? — Jon Babcock <jon@...> 2000/10/11

Thanks for the input.

[#5432] Re: Ruby Book Eng. tl, 9.8.11 -- seishitsu ? — Yasushi Shoji <yashi@...> 2000/10/11

At Thu, 12 Oct 2000 04:53:41 +0900,

[#5516] Re: Some newbye question — ts <decoux@...>

>>>>> "D" == Davide Marchignoli <marchign@di.unipi.it> writes:

80 messages 2000/10/13
[#5531] Re: Some newbye question — matz@... (Yukihiro Matsumoto) 2000/10/14

Hi,

[#5544] Re: Some newbye question — Davide Marchignoli <marchign@...> 2000/10/15

On Sat, 14 Oct 2000, Yukihiro Matsumoto wrote:

[#5576] Re: local variables (nested, in-block, parameters, etc.) — Dave Thomas <Dave@...> 2000/10/16

matz@zetabits.com (Yukihiro Matsumoto) writes:

[#5617] Re: local variables (nested, in-block, parameters, etc.) — "Brian F. Feldman" <green@...> 2000/10/16

Dave Thomas <Dave@thomases.com> wrote:

[#5705] Dynamic languages, SWOT ? — Hugh Sasse Staff Elec Eng <hgs@...>

There has been discussion on this list/group from time to time about

16 messages 2000/10/20
[#5712] Re: Dynamic languages, SWOT ? — Charles Hixson <charleshixsn@...> 2000/10/20

Hugh Sasse Staff Elec Eng wrote:

[#5882] [RFC] Towards a new synchronisation primitive — hipster <hipster@...4all.nl>

Hello fellow rubyists,

21 messages 2000/10/26

[ruby-talk:5638] Re: passing single or multiple strings.

From: Hugh Sasse Staff Elec Eng <hgs@...>
Date: 2000-10-17 14:02:23 UTC
List: ruby-talk #5638
On Tue, 17 Oct 2000, [iso-8859-1] Aleksi Niemelwrote:

> Hugh asks:
	[...] 
> > irb(main):002:0> *x
> > SyntaxError: compile error
> > irb(main):003:0> p *x
> > [[2.3], 4, [5, 6]]
> > nil
> 
> > Not sure why *x didn't work there...  
> 
> Well, there's no such construct as plain *x. But there are constructs for
> indexing (aref_args), multiple left hand side on assignment (mhls), multiple
	[...]
> where the star symbol (tSTAR) have special meaning. (The names in
> parentheses could be found from parse.y, if you want to check.)

OK, I will have another look at that.
> 
> So in above case *x does not parse, thus there's an error, but p *x parses,
> as it means p(*x) and call_args rule parses *x. Namely *x in this context
> takes an array of x and translates the elements to be arguments. That means
> it concatenates the elements to the argument list, thus "removes" the
> outmost level of array.

So *x won't work because a list of arguments is not a full expression....
irb(main):001:0> def wossname(x)
irb(main):002:1>     x
irb(main):003:1> end
nil
irb(main):004:0> x = [[[2.3], 4, [5, 6]]]
[[[2.3], 4, [5, 6]]]
irb(main):005:0> wossname(x)
[[[2.3], 4, [5, 6]]]
irb(main):006:0> wossname(*x)
[[2.3], 4, [5, 6]]

OK.  That makes sense. So does this:

irb(main):011:0> wossname(3,4,5)
ArgumentError: wrong # of arguments(3 for 1)
(irb):11:in `wossname'
(irb):11:in `irb_binding'
irb(main):012:0> wossname([3,4,5])
[3, 4, 5]
irb(main):013:0> wossname(*[3,4,5])
ArgumentError: wrong # of arguments(3 for 1)
(irb):13:in `wossname'
(irb):13:in `irb_binding'
irb(main):014:0> 

That seems reasonable.

So the only 2 questions remaining for me are:
Why is a list of arguments treated so differently -- it should still
be an object, shouldn't it?
irb(main):014:0> wossname(*x).type
Array
irb(main):015:0> wossname(x).type
Array
irb(main):016:0> x
[[[2.3], 4, [5, 6]]]
irb(main):017:0> 
Then it should still count as an expression. So why not?

Should the function *x on x === Array be made available as a true method
of Array?  Ruby is fully OO after all, so...

> 
> Thus the difference of p x and p *x is not very visible, but very
> significant:
> 
> p  x  [[[2.3], 4, [5, 6]]]
> p *x   [[2.3], 4, [5, 6]]

Yes.
> 
> By investigating the other constructs I listed, you'll find out the
> different uses for *constructs.
> 
> 	- Aleksi
> 
	Hugh
	hgs@dmu.ac.uk


In This Thread

Prev Next