Project

General

Profile

Feature #18597

Updated by danh337 (Dan H) over 2 years ago

This is related to #16295, but focuses only on the `.+@` part. 

 Currently we can use `.dup` in a method chain when we need to mutate a String. 

 However there are cases where the code's context *expects* the String to be mutated. In cases like this, `.dup` always works, but we don't want to duplicate a String that is already mutable. 

 Since `.+@` looks more like an operator, it can be unintuitive in a method chain, so this is asking for a new named method that can be used in its place, instead of always `.dup`. 

 For example: 
 ``` 
 def add_result_text(buffer, new_result) 
   text = "#{new_result.count} #{new_result.input} #{do_fancy_calc(new_result)}\n" 
   buffer.dup_if_immutable << text 
   #        ^^^^^^^^^^^^^^^^ new method? 
 end 

 buffer = "" # ...maybe immutable 

 get_lots_of_results.each do |result| 
   buffer = add_result_text(buffer, result) # In case it was dup'ed 
 end 
 ``` 

Back