Почему истина && «строка» возвращает «строку»
Допустим, у меня есть что-то вроде
true && true #=> true
Что имеет смысл, поэтому я пытаюсь что-то вроде:
true && "dsfdsf" #=> "dsfdsf"
Что удивляет меня, потому что часто я буду делать что-то вродеif something && something
и я всегда думал, что это оценивает как истину и вернет истину. Дальнейшие эксперименты делают такие вещи, как:
jruby-1.7.3 :009 > "ad" && "dsf"
=> "dsf"
jruby-1.7.3 :010 > "ad" && "sdfd" && nil
=> nil
jruby-1.7.3 :011 > "ad" && nil && "sdf"
=> nil
создается впечатление, что Ruby возвращает либо последнее значение, если все верно, либо первое ложное значение, которое он находит. Почему он это делает? и это правильная ментальная модель?