Actions
Bug #20966
closedUnary plus String warns about freezing
Bug #20966:
Unary plus String warns about freezing
Actions
Added by getajobmike (Mike Perham) over 1 year ago. Updated over 1 year ago.
I think you are being tripped up by the low precedence of the unary operator, which is applied after the whole chain of calls are made. Try parenthesizing the unary plus and the string.
+"\x1f\x8b".force_encoding("BINARY") is parsed as
+( "\x1f\x8b".force_encoding("BINARY") ) and the warning is coming from force_encoding.
Try (+"\x1f\x8b").force_encoding("BINARY") or "\x1f\x8b".+@().force_encoding("BINARY").
A way to see the order is with ruby/debug:
$ rdbg -e 'trace call' -e 'c' test.rb
[1, 2] in test.rb
=> 1| Warning[:deprecated] = true
2| _ = +"a".force_encoding("BINARY")
=>#0 <main> at test.rb:1
(rdbg:commands) trace call
Enable CallTracer (enabled)
(rdbg:commands) c
DEBUGGER (trace/call) #th:1 #depth:2 > Warning.[]= at test.rb:1
DEBUGGER (trace/call) #th:1 #depth:2 < Warning.[]= #=> true at test.rb:1
DEBUGGER (trace/call) #th:1 #depth:2 > String#force_encoding at test.rb:2
DEBUGGER (trace/call) #th:1 #depth:3 > Warning#warn at test.rb:2
test.rb:2: warning: literal string will be frozen in the future (run with --debug-frozen-string-literal for more information)
DEBUGGER (trace/call) #th:1 #depth:3 < Warning#warn #=> nil at test.rb:2
DEBUGGER (trace/call) #th:1 #depth:2 < String#force_encoding #=> "a" at test.rb:2
DEBUGGER (trace/call) #th:1 #depth:2 > String#+@ at test.rb:2
DEBUGGER (trace/call) #th:1 #depth:2 < String#+@ #=> "a" at test.rb:2