[#67346] Future of test suites for Ruby — Charles Oliver Nutter <headius@...>
I'll try to be brief so we can discuss all this. tl;dr: RubySpec is
19 messages
2015/01/05
[#67353] Re: Future of test suites for Ruby
— Tanaka Akira <akr@...>
2015/01/05
2015-01-06 7:18 GMT+09:00 Charles Oliver Nutter <[email protected]>:
[#67444] [ruby-trunk - Feature #10718] [Open] IO#close should not raise IOError on closed IO objects. — akr@...
Issue #10718 has been reported by Akira Tanaka.
3 messages
2015/01/09
[#67689] Keyword Arguments — Anthony Crumley <anthony.crumley@...>
Please forgive my ignorance as I am new to MRI development and am still
5 messages
2015/01/20
[#67733] [ruby-trunk - Bug #10761] Marshal.dump 100% slower in 2.2.0 vs 2.1.5 — normalperson@...
Issue #10761 has been updated by Eric Wong.
4 messages
2015/01/21
[#67736] Re: [ruby-trunk - Bug #10761] Marshal.dump 100% slower in 2.2.0 vs 2.1.5
— Eric Wong <normalperson@...>
2015/01/22
[email protected] wrote:
[#67772] Preventing Redundant Email Messages — Jeremy Evans <code@...>
For a long time, I've wondered why I sometimes receive redundant email
5 messages
2015/01/23
[ruby-core:67440] [ruby-trunk - Bug #10708] In a function call, double splat of an empty hash still calls the function with an argument
From:
dunric29a@...
Date:
2015-01-09 00:57:10 UTC
List:
ruby-core #67440
Issue #10708 has been updated by David Unric.
If I am not mistaken, even latest Ruby 2.2 selects keyword arguments as the=
last method's argument and of Hash type.
Let's imagine an example where both simple and keyword optional arguments a=
re used:
~~~
def call_multiargs(method, *aopts, **kwopts); send(method, *aopts, **kwopts=
); end
# kwopts can be passed to send method without double-splat operator as it d=
oes _nothing_ here
def args_and_kwargs(*args, **kwargs); p args; p kwargs; end
call_multiargs(:args_and_kwargs, **{a: 1, b:2})
# How should Ruby expand the hash ?
# - as (:a, 1, :b, 2) list so kwopts would be empty {} ?
# - as (:a, 1) and {b: 2} so kwopts would be {b: 2} ?
# - as {a: 1, b:2} so aopts would be empty [] ?
# - as ([:a, 1], [:b, 2]) list and kwopts would be empty {} ?
# - as ([:a, 1]) and {:b, 2} ?
# etc
~~~
Because Ruby has no special keyword list type like Python has and for keywo=
rd arguments a single Hash instance is used, it is fundamentally not possib=
le to do an expansion of `**{=E2=80=A6}` into a list.
Again, in Ruby there does not exist a list of type `:a =3D> 1, :b =3D> 2`. =
What you see in a method call is a syntactic sugar for `{:a =3D> 1, :b =3D>=
2}`, ie. optional braces.
To keep consistency there can't exist an exception to this rule for empty h=
ashes.
To sum it up, use of double-splat operator for hash expansion is wrong and =
makes no sense.
p.s. As far as I know, there are only two cases and only as a parser syntax=
helpers for Hash and Array constructors, quite unrelated to some list expa=
nsion:
`{**{:a =3D> 1, :b =3D> 2}}` - enclosed hash items used for implicit form
`[*{:a =3D> 1, :b =3D> 2}]` - enclosed hash converted with Hash#to_a and u=
sed for implicit form
----------------------------------------
Bug #10708: In a function call, double splat of an empty hash still calls t=
he function with an argument
https://bugs.ruby-lang.org/issues/10708#change-50869
* Author: Damien Robert
* Status: Open
* Priority: Normal
* Assignee:=20
* Category:=20
* Target version:=20
* ruby -v: ruby 2.2.0p0 (2014-12-25 revision 49005) [x86_64-linux]
* Backport: 2.0.0: UNKNOWN, 2.1: UNKNOWN, 2.2: UNKNOWN
----------------------------------------
Consider this:
def foo; end
foo(*[]) #Splatting an empty list is ok
foo(**{}) #Double splatting an empty hash is like calling foo({}) which=
gives an error
This is annoying in a function that is a wrapper around another function an=
d just process some keywords:
def wrapper(*args, keyword: true, **others)
puts keyword
wrappee(*args,**others) #here this code will fail if others is empty
end
--=20
https://bugs.ruby-lang.org/