QA@IT
«回答へ戻る

typo fix

110
-!!bar の意図は bar の値を true か false のどちらか変換することでしょうが、Ruby 1.9 以降では、! は !@ メソッドの呼び出しということになったので、!! はその意図を完全に実装しているわけではありません。!@ が再定義されていると true でも false でもない値になることがありえます。
+!!bar の意図は bar の値を true か false のどちらかに変換することでしょうが、Ruby 1.9 以降では、! は !@ メソッドの呼び出しということになったので、!! はその意図を完全に実装しているわけではありません。!@ が再定義されていると true でも false でもない値になることがありえます。
 それを避ける方法は bar ? true : false というようなものでしょう。
 
 ```ruby

!!bar の意図は bar の値を true か false のどちらかに変換することでしょうが、Ruby 1.9 以降では、! は !@ メソッドの呼び出しということになったので、!! はその意図を完全に実装しているわけではありません。!@ が再定義されていると true でも false でもない値になることがありえます。
それを避ける方法は bar ? true : false というようなものでしょう。

class C
  def !@
    C.new
  end
end
bar = C.new  
p !!bar #=> #<C:0x007fcfa3d6fa90>
p bar ? true : false #=> true

とか。

!!bar の意図は bar の値を true か false のどちらかに変換することでしょうが、Ruby 1.9 以降では、! は !@ メソッドの呼び出しということになったので、!! はその意図を完全に実装しているわけではありません。!@ が再定義されていると true でも false でもない値になることがありえます。
それを避ける方法は bar ? true : false というようなものでしょう。

```ruby
class C
  def !@
    C.new
  end
end
bar = C.new  
p !!bar #=> #<C:0x007fcfa3d6fa90>
p bar ? true : false #=> true
```

とか。

回答を投稿

!!bar の意図は bar の値を true か false のどちらか変換することでしょうが、Ruby 1.9 以降では、! は !@ メソッドの呼び出しということになったので、!! はその意図を完全に実装しているわけではありません。!@ が再定義されていると true でも false でもない値になることがありえます。
それを避ける方法は bar ? true : false というようなものでしょう。

class C
  def !@
    C.new
  end
end
bar = C.new  
p !!bar #=> #<C:0x007fcfa3d6fa90>
p bar ? true : false #=> true

とか。

!!bar の意図は bar の値を true か false のどちらか変換することでしょうが、Ruby 1.9 以降では、! は !@ メソッドの呼び出しということになったので、!! はその意図を完全に実装しているわけではありません。!@ が再定義されていると true でも false でもない値になることがありえます。
それを避ける方法は bar ? true : false というようなものでしょう。

```ruby
class C
  def !@
    C.new
  end
end
bar = C.new  
p !!bar #=> #<C:0x007fcfa3d6fa90>
p bar ? true : false #=> true
```

とか。