Programming Ruby 3.2 (5th Edition): B2.0 page 357, missing user receiver

@noelrappin

page 357, in the first users.map, convert_to_json is sent to self instead of user :

users.map { |user| convert_to_json }
users.map { _1.convert_to_json }
users.map(&:convert_to_json)

The second users.map has _1 as receiver, the third has one element of users as implicit receiver.

So the first should be users.map { |user| user.convert_to_json }.

users = %w|a b c|

public def convert_to_json
    puts "in convert_to_json for #{self}"
end

puts '---------- users.map { |user| convert_to_json }'
users.map { |user| convert_to_json }
puts '---------- users.map { _1.convert_to_json }'
users.map { _1.convert_to_json }
puts '---------- users.map(&:convert_to_json)'
users.map(&:convert_to_json)
puts '---------- users.map { |user| user.convert_to_json }'
users.map { |user| user.convert_to_json }
% ruby -w convert_to_json.rb        
---------- users.map { |user| convert_to_json }
in convert_to_json for main
in convert_to_json for main
in convert_to_json for main
---------- users.map { _1.convert_to_json }
in convert_to_json for a
in convert_to_json for b
in convert_to_json for c
---------- users.map(&:convert_to_json)
in convert_to_json for a
in convert_to_json for b
in convert_to_json for c
---------- users.map { |user| user.convert_to_json }
in convert_to_json for a
in convert_to_json for b
in convert_to_json for c

Yes, that is correct, fixed.