Является ли троичный оператор в Ruby действительно синтаксическим сахаром для операторов if ... then ... else ... end?
Да.
С doc/syntax/control_expressions.rdoc
Вы также можете написать выражение if-then-else, используя ?
и :
. Это троичный, если:
input_type = gets =~ /hello/i ? "greeting" : "other"
То же самое, что и это if
выражение:
input_type =
if gets =~ /hello/i
"greeting"
else
"other"
end
" Согласно этой книге," каждая операция является вызовом метода для некоторого объекта и возвращает значение. "В этом смысле, если троичный оператор представляет операцию, это вызов метода для объекта с двумя аргументы."
if
, unless
, while
и until
не являются операторами, они являются управляющими структурами. Их версии модификаторов появляются в таблице приоритетов операторов , потому что они должны иметь приоритет для анализа. Они просто проверяют, является ли их условие истинным или ложным. В Ruby это просто, только false
и nil
являются ложными. Все остальное правда.
Операторами являются такие вещи, как !
, +
, *
и []
. Они унарные или двоичные . Вы можете увидеть их список, вызвав .methods.sort
на различных объектах. Например ...
2.4.3 :004 > 1.methods.sort
=> [:!, :!=, :!~, :%, :&, :*, :**, :+, :+@, :-, :-@, :/, :<, :<<, :<=, :<=>, :==, :===, :=~, :>, :>=, :>>, :[], :^, :__id__, :__send__, etc...
Обратите внимание, что в Smalltalk , из которого Ruby активно заимствует, все на самом деле является вызовом метода. Включая управляющие структуры .