some_instance=Class.new{defsome_setter=(a:,b:);end}.newsetter_params={a: 1,b: 2}some_instance.some_setter=setter_params# => {:a=>1, :b=>2}# warning: Using the last argument as keyword parameters is deprecated; maybe ** should be added to the call# warning: The called method `some_setter=' is defined heresome_instance.public_send(:some_setter=,**setter_params)# => nil# No warninigs, everything is ok
If this behavior is okay, probably we need to add the ability to use the double splat operator with syntax sugar like in example below:
This is expected behavior in Ruby 2.7, due to keyword argument separation. The warning is valid because the code will cause an ArgumentError in Ruby 3.
You should not use keywords parameters if you want to assign a hash. Instead, you should have the method accept a single hash argument. Note that calling the method directly with keywords will not cause a warning. some_instance.send(:some_setter=, :a=>1, :b=>2) doesn't warn, but some_instance.send(:some_setter=, {:a=>1, :b=>2}) does.
This is expected behavior in Ruby 2.7, due to keyword argument separation. The warning is valid because the code will cause an ArgumentError in Ruby 3.
You should not use keywords parameters if you want to assign a hash. Instead, you should have the method accept a single hash argument. Note that calling the method directly with keywords will not cause a warning. some_instance.send(:some_setter=, :a=>1, :b=>2) doesn't warn, but some_instance.send(:some_setter=, {:a=>1, :b=>2}) does.