こんにちは
小西と申します。

rubyの実装を知っているわけではないので、憶測になりますが
おそらく同じスコープに、 「変数 p」と「メソッド p」が混在しているため
文脈で p をどちらか判断するさいに、

p (-1.3)
までをメソッド呼び出しとして判断したのだと思います。
p は引数を戻すので、その後の abs メソッドもエラーにならず呼ばれています。

つまり
(p (-1.3)).abs
として、動いたのだと思います。


2017年9月4日(月) 9:38 Katsunori Nakai <bigswim.atom / gmail.com>:

> 初めて投稿させて頂きます。中井と申します。
> 既出の質問でしたら済みません。
>
> #p = 2
> p (-1.3).abs
> puts (-1.3).abs
>
> とすると、outputが
> 1.3
> 1.3
> となりますが、#を消してpを変数として使うとoutputが
> -1.3
> 1.3
> となりました。
>
> どうしてpを変数として使うと、1行目のoutputで負の数値が返ってくるのでしょうか?
>
> ちなみに、ruby 2.4.1p111での動作です。
>
> よろしくお願いします。
>
> 中井
>