If - else if - else инструкция и скобки
Я понимаю, что обычный способ написать оператор if - else if следующий:
if (2==1) {
print("1")
} else if (2==2) {
print("2")
} else {
print("3")
}
или же
if (2==1) {print("1")
} else if (2==2) {print("2")
} else print("3")
Наоборот, если я напишу так
if (2==1) {
print("1")
}
else if (2==2) {
print("2")
}
else (print("3"))
или так:
if (2==1) print("1")
else if (2==2) print("2")
else print("3")
утверждение не работает. Можете ли вы объяснить мне, почему }
должно предшествовать else
или else if
, else if
в одной и той же линии? Есть ли какой-нибудь другой способ написать оператор if-else if-else в R, особенно без скобок?
Ответы
Ответ 1
R читает эти команды по строкам, поэтому он думает, что вы закончили после выполнения выражения после оператора if. Помните, вы можете использовать if
без добавления else
.
Ваш третий пример будет работать в функции, потому что вся функция определена перед выполнением, поэтому R знает, что она еще не выполнена (после if() do
).
Ответ 2
В R также имеется функция ifelse():
ifelse(1 < 0, "hello", "hi")
Вывод:
# [1] "hi"
Ответ 3
Как hrbrmstr упомянул:
Если начальное значение if сопровождается составным выражением (указанное пара {}) синтаксический анализатор по умолчанию ожидает выражения а затем еще и быть сложным. Единственное определенное использование else с составными выражениями.
В заявлении if(cond) cons.expr else alt.expr
значение else
должно быть указано после и в той же строке с концом `cons.expr '.
Итак, если вы хотите, чтобы ваш код выглядел лучше без скобок, примените этот способ:
if (2==1) print("1") else
if (2==2) print("2") else
print("3")
Ответ 4
Это хорошая идея использовать фигурные скобки, когда есть вложенные ifs. Например, в
if(n>0)
if(a>b)
z=a;
else
z=b;
else идет с внутренним, если не с if (n > 0). Если это не то, что вы хотите, скобки должны использоваться для принудительной ассоциации:
if(n>0){
if(a>b)
z=a;
}
else
z=b;
Подробнее, очень хороший полный учебник: Условные операторы: if-else, else-if и switch in C! Надеюсь, это поможет вы!