The global value true is the only instance of class TrueClass and represents a logically true value in boolean expressions. The class provides operators allowing true to be used in logical expressions.
And—Returns false if obj is nil or false, true otherwise.
/*
* call-seq:
* true & obj => true or false
*
* And---Returns <code>false</code> if <i>obj</i> is
* <code>nil</code> or <code>false</code>, <code>true</code> otherwise.
*/
static VALUE
true_and(obj, obj2)
VALUE obj, obj2;
{
return RTEST(obj2)?Qtrue:Qfalse;
}
Exclusive Or—Returns true if obj is nil or false, false otherwise.
/*
* call-seq:
* true ^ obj => !obj
*
* Exclusive Or---Returns <code>true</code> if <i>obj</i> is
* <code>nil</code> or <code>false</code>, <code>false</code>
* otherwise.
*/
static VALUE
true_xor(obj, obj2)
VALUE obj, obj2;
{
return RTEST(obj2)?Qfalse:Qtrue;
}
The string representation of true is "true".
/*
* call-seq:
* true.to_s => "true"
*
* The string representation of <code>true</code> is "true".
*/
static VALUE
true_to_s(obj)
VALUE obj;
{
return rb_str_new2("true");
}
Or—Returns true. As anObject is an argument to a method call, it is always evaluated; there is no short-circuit evaluation in this case.
true | puts("or")
true || puts("logical or")
produces:
or
/*
* call-seq:
* true | obj => true
*
* Or---Returns <code>true</code>. As <i>anObject</i> is an argument to
* a method call, it is always evaluated; there is no short-circuit
* evaluation in this case.
*
* true | puts("or")
* true || puts("logical or")
*
* <em>produces:</em>
*
* or
*/
static VALUE
true_or(obj, obj2)
VALUE obj, obj2;
{
return Qtrue;
}