Feature #8827
closedA method that flips the receiver and the first argument
Description
=begin
If it often happens that we need to pass to a method an argument that is the result of a long chain of operations:
Hash[some_chain_of_operations_that_ends_up_with_an_array]
File.read(some_chain_of_operations_that_ends_up_with_a_string)
YAML.dump(some_chain_of_operations_that_ends_up_with_an_object)
...
I believe one basic tenet of Ruby is to encourage method chaining, but that practice is discouraged in the examples above. It would be convenient if there is a method (let us call this Object#flip
) that flips the receiver and the first argument and sends the method so that the examples above can be written as follows:
some_chain_of_operations_that_ends_up_with_an_array.flip(Hash, :[])
some_chain_of_operations_that_ends_up_with_a_string.flip(File, :read)
some_chain_of_operations_that_ends_up_with_an_object.flip(YAML, :dump)
...
The implementation in Ruby may be as follows:
class Object
def flip receiver, method, *rest, &pr
receiver.send(method, self, *rest, &pr)
end
end
It would be good if we can have that as a built-in Ruby method.
=end
Updated by nobu (Nobuyoshi Nakada) over 10 years ago
=begin
You can write as:
some_chain_of_operations_that_ends_up_with_an_array.tap {|ary| Hash[ary]}
some_chain_of_operations_that_ends_up_with_a_string.tap {|path| File.read(path)}
some_chain_of_operations_that_ends_up_with_an_object.tap {|obj| YAML.dump(obj)}
=end
Updated by sawa (Tsuyoshi Sawada) over 10 years ago
nobu, I think you mean tap{|ary| break ...}
, etc. That does not look concise enough for me. It might look like a small difference, but it makes huge difference when you are in the middle of a chain. It saves you from thinking extra things.
Updated by Anonymous over 10 years ago
=begin
some_chain_of_operations_that_ends_up_with_an_array.tap(&Hash.method(:[]))
=end
Updated by sawa (Tsuyoshi Sawada) over 10 years ago
charliesome, that has the same problem as nobu's. It does not return the final result. It gives back the receiver.
Updated by alexeymuranov (Alexey Muranov) over 10 years ago
I think this request is mostly a duplicate of #6721.
Updated by sawa (Tsuyoshi Sawada) 11 months ago
Since then
has been introduced, I think using that is more straightforward. I withdraw this feature. Please close it.
Updated by jeremyevans0 (Jeremy Evans) 11 months ago
- Status changed from Open to Closed