Почему эта отметка неправильная?

Я изучаю ткл.

Я написал код.

test.tcl

set design C
set Z 0
if {${design} == "A"} {
    set Z 5
} elseif {${design} == "B"} {
    set Z 10
#} elseif {${design} == "C"} {
#    set Z 15
} else {
    set Z 20
}

puts "Z = ${Z}"

затем запустите: tclsh test.tcl

почему я получил ответ: Я = 0

вместо: З = 20

Разве я не могу так отметить?

Вы отредактировали свой вопрос, чтобы исправить синтаксические ошибки, вызвавшие проблему, что сделало недействительными ответы, приведенные ниже.

Dúthomhas 05.09.2024 13:57

Отредактированный вопрос — это вопрос, который я изначально хотел задать.

BKHOME 05.09.2024 14:00

Это странно в том, как работает Tcl. См. Почему я не могу разместить несовпадающие фигурные скобки в комментариях Tcl

Dúthomhas 05.09.2024 14:08

Вы можете назвать это странным. Я называю это последовательным. :-)

Schelte Bron 05.09.2024 14:19
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
2
4
61
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ваш синтаксис неверен.

set design C
set Z 0
if {$design == "A"} {
  set Z 5
} elseif {$design == "B"} {
  set Z 10
} else {
  set Z 20
}
puts "Z = $Z"

См. https://onecompiler.com/tcl/42r9yg9cg

Какая часть неправильного синтаксиса приводила к печати Z = 0 вместо Z = 20?

mkrieger1 05.09.2024 14:57
Ответ принят как подходящий

Синтаксис Tcl очень прост. Каждая команда состоит из имени команды и нуля или более аргументов. В Tcl команда if аналогична любой другой команде. Никаким особым образом это не лечится. Итак, интерпретатор Tcl принимает вашу команду и разделяет ее на имя команды (if) и следующий список аргументов (пробелы переформатированы для ясности):

  1. {${design} == "A"}
  2. {набор Z 5}
  3. еще если
  4. {${design} == "B"}
  5. {установить Z 10 ;#}
  6. еще если
  7. {${design} == "C"}
  8. {# набор Z 15}
  9. еще
  10. {набор Z 20}

Команда if оценивает первый аргумент. Это «ложь», поэтому второй аргумент пропускается. Поскольку третьим аргументом является «elseif», затем проверяется четвертый аргумент. Продолжая в том же духе, он в конечном итоге сталкивается с аргументом №7, условием {${design} == "C"}. На это не влияет символ «#» внутри аргумента №5. Поскольку $design фактически имеет значение «C», это условие оценивается как «истина», в результате чего аргумент № 8 выбирается в качестве части тела для выполнения. Этот аргумент состоит из одной строки, начинающейся с «#», поэтому он рассматривается как комментарий. Теперь команда if выполнила свою работу и Z остается неизменным.

На самом деле {} не являются частью аргумента. Я просто сохранил их в качестве ориентира для группировки.

Schelte Bron 05.09.2024 14:15

Я так понимаю это? Интерпретатор tcl сначала сопоставит фигурные скобки, чтобы сгруппировать их, а затем проигнорирует командные строки, начинающиеся с #.

BKHOME 06.09.2024 02:59

Другие вопросы по теме