We can:
a = [2,1]
[3,*a] #=> [3,2,1]
How about:
h = {:b=>2, :a=>1}
{:c => 3, **h} #=> {:c=>3, :b=>2, :a=>1}
T.
We can:
a = [2,1]
[3,*a] #=> [3,2,1]
How about:
h = {:b=>2, :a=>1}
{:c => 3, **h} #=> {:c=>3, :b=>2, :a=>1}
T.
Trans [email protected] wrote:
We can:
a = [2,1]
[3,*a] #=> [3,2,1]How about:
h = {:b=>2, :a=>1}
{:c => 3, **h} #=> {:c=>3, :b=>2, :a=>1}
How about:
class Hash; alias_method :<<, :merge!; end
So, for example:
h = {:b=>2, :a=>1}
{:c => 3} << h
#=> {:c=>3, :b=>2, :a=>1}
But perhaps I’m missing some desideratum other than brevity. m.
On Mon, 23 Oct 2006 20:49:55 -0700, Trans wrote:
T.
The purpose of splat is to convert an array into a list of parameters to
a
method. Since [] is a method, this happens to work well for including an
array into another array. But that’s not its purpose, just a side
effect.
There’s no real concept of converting a hash into a list of parameters
to
a function, so there’s no splat notation for it.
If you want to combine hashes, use the merge method
{:c=>3}.merge(h) #=> {:a=>1, :b=>2, :c=>3}
Ken B.:
On Mon, 23 Oct 2006 20:49:55 -0700, Trans wrote:
a = [2,1]
[3,*a] #=> [3,2,1]
The purpose of splat is to convert an array into a list of parameters to a
method. Since [] is a method,
irb> method :[]
NameError: undefined method []' for class
Object’
Kalman
Hi –
On Tue, 24 Oct 2006, Kalman N. wrote:
Ken B.:
On Mon, 23 Oct 2006 20:49:55 -0700, Trans wrote:
a = [2,1]
[3,*a] #=> [3,2,1]
The purpose of splat is to convert an array into a list of parameters to a
method. Since [] is a method,irb> method :[]
NameError: undefined method[]' for class
Object’
irb(main):003:0> a = [2,1]
=> [2, 1]
irb(main):004:0> [3, *a]
=> [3, 2, 1]
David
Trans schrieb:
T.
we can do by using method Hash::[] instead of literal {}
Hash[ :c, 3, *h ] # => {:c=>3, [:a, 1]=>[:b, 2]}
Rolf
On 10/24/06, [email protected] [email protected] wrote:
irb(main):003:0> a = [2,1]
=> [2, 1]
irb(main):004:0> [3, *a]
=> [3, 2, 1]
I think Kalman was just pointing out that [] (in this case as the
array literal syntax) is not a method, contrary to what Ken had
claimed.
Jacob F.
Rolf Gebauer schrieb:
{:c => 3, **h} #=> {:c=>3, :b=>2, :a=>1}
T.
we can do by using method Hash::[] instead of literal {}Hash[ :c, 3, *h ] # => {:c=>3, [:a, 1]=>[:b, 2]}
sorry for (twice) rubbish
must be :
Hash[ :c, 3, *h.to_a.flatten ] # => {:c=>3, [:a, 1]=>[:b, 2]}
Rolf
Ken B. wrote:
{:c => 3, **h} #=> {:c=>3, :b=>2, :a=>1}
T.
The purpose of splat is to convert an array into a list of parameters to a
method. Since [] is a method, this happens to work well for including an
array into another array. But that’s not its purpose, just a side effect.There’s no real concept of converting a hash into a list of parameters to
a function, so there’s no splat notation for it.
Not so for Ruby 2.0, assuming we do indeed get key parameters:
def foo( **keys )
p keys
end
If you want to combine hashes, use the merge method
{:c=>3}.merge(h) #=> {:a=>1, :b=>2, :c=>3}
And with arrays one can use #+. That’s fine, but it lacks a certain
elegance in some instances.
T.
On 10/24/06, Kalman N. [email protected] wrote:
NameError: undefined method
[]' for class
Object’Kalman
Maybe you want to try this
Array.instance_method :[]
Cheers
Robert
–
The reasonable man adapts himself to the world; the unreasonable one
persists in trying to adapt the world to himself. Therefore all progress
depends on the unreasonable man.
On 10/24/06, Trans [email protected] wrote:
> > > > h = {:b=>2, :a=>1} > > {:c => 3, **h} #=> {:c=>3, :b=>2, :a=>1}
I want this toy +1
{:c=>3}.merge(h) #=> {:a=>1, :b=>2, :c=>3}
And with arrays one can use #+. That’s fine, but it lacks a certain
elegance in some instances.
T.
Completely agree
Robert
–
The reasonable man adapts himself to the world; the unreasonable one
persists in trying to adapt the world to himself. Therefore all progress
depends on the unreasonable man.
Rick DeNatale:
Array.instance_method :[]
But I think that Kalman’s point wasn’t that there are no :[] methods,
which of course there are, but that the snippet[3, *a]
Isn’t a method call but syntax.
Exactly.
Kalman
On 10/26/06, Rick DeNatale [email protected] wrote:
a
But I think that Kalman’s point wasn’t that there are no :[] methods,
both argument passing and literal construction can be viewed as usages
of parallel assignment.
You are right about all you were saying, only I did not want to make any
statements about that,
I just wanted to underline that :[] was an instance method of Array as
I
did not think about Kalman’s point .
I thaught about the impact on an interested newbie reader.
Was I too harsh/quick/offensive? If so I am sorry;
I thaught it was an important minor point to make and I thaught I was
quite
alligned with Kalman’s style but I have no problem in admiting errors
Cheers
Robert
–
Rick DeNatale
My blog on Ruby
http://talklikeaduck.denhaven2.com/
–
The reasonable man adapts himself to the world; the unreasonable one
persists in trying to adapt the world to himself. Therefore all progress
depends on the unreasonable man.
Hi –
On Wed, 25 Oct 2006, Jacob F. wrote:
irb> method :[]
NameError: undefined method[]' for class
Object’irb(main):003:0> a = [2,1]
=> [2, 1]
irb(main):004:0> [3, *a]
=> [3, 2, 1]I think Kalman was just pointing out that [] (in this case as the
array literal syntax) is not a method, contrary to what Ken had
claimed.
Right, I didn’t pick up on that.
David
On 10/25/06, Robert D. [email protected] wrote:
irb> method :[]
NameError: undefined method[]' for class
Object’
Maybe you want to try this
Array.instance_method :[]
But I think that Kalman’s point wasn’t that there are no :[] methods,
which of course there are, but that the snippet
[3, *a]
Isn’t a method call but syntax.
And adding to that, splat isn’t just for method parameters, but for
cases like this as well as parallel assignment.
And I think of splat as primarily a parallel assignment ‘thing’ since
both argument passing and literal construction can be viewed as usages
of parallel assignment.
–
Rick DeNatale
My blog on Ruby
http://talklikeaduck.denhaven2.com/
This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.
Sponsor our Newsletter | Privacy Policy | Terms of Service | Remote Ruby Jobs