0

Rubyで明示的に真または偽に評価せずに真/偽の値を取得する簡単な方法はありますか?

たとえば、もっと簡潔に表現するにはどうすればよいでしょうか

class User
  def completed_initialization?
    initialization_completed == 1 ? true : false
  end
end

の行に沿って何かを行う方法はありますか

initialization_completed.true?

明らかにそれほど多くはありませんが、私は Ruby の禅の庭にいるので、それを受け入れたほうがよいでしょう。

編集(例を更新しました)

@Sergio Tulentsevによって非常に穏やかに指摘されたように、この質問は非常にひどい言い回しでした。元の例 (以下) はもちろん、ブール値に直接評価されます。私が言いたいことの例を見つけるのにまだ苦労していますが、セルジオの二重否定は実際、まさに私が探していたものでした.

元の例

class User
  def top_responder
    responses.count > 10 ? true : false
  end
end
4

1 に答える 1

5

>演算子はすでにブール値を返しています。だからそれはただのことができます

  def top_responder
    responses.count > 10
  end

任意の値をブール値に変換するために、この小さな二重否定のトリックを提供します。

t = 'foo'
!!t # => true

t = 1
!!t # => true

t = 0
!!t # => true

t = nil
!!t # => false

最初の否定は、値をブール値に「キャスト」し、それを反転します。つまり、nil/に対して true を返し、それfalse以外のすべてに対して false を返します。「通常の」値を生成するには、別の否定が必要です。

于 2012-06-22T10:30:16.807 に答える