Ruby: eval with string interpolation

后端 未结 2 527
独厮守ぢ
独厮守ぢ 2021-02-04 12:09

I don\'t understand, why eval works like this:

\"123 #{456.to_s} 789\" # => \"123 456 789\"
eval(\'123 #{456.to_s} 789\') # => 123
         


        
2条回答
  •  孤独总比滥情好
    2021-02-04 13:01

    What's happening, is eval is evaluating the string as source code. When you use double quotes, the string is interpolated

    eval '"123 #{456.to_s} 789"'
    # => "123 456 789"
    

    However when you use single quotes, there is no interpolation, hence the # starts a comment, and you get

    123 #{456.to_s} 789
    # => 123
    

    The string interpolation happens before the eval call because it is the parameter to the method.

    Also note the 456.to_s is unnecessary, you can just do #{456}.

提交回复
热议问题