Проблема с множественным условием при выражении в CoffeeScript - PullRequest
0 голосов
/ 13 апреля 2020

В Финляндии, как и во многих странах, у нас есть именные дни для разных имен.

Я пытаюсь написать приложение Ubersicht для отображения дня года и названия этого дня.

Я ввел День года (%j) и Год (%Y), разделил их, чтобы я мог ими манипулировать, и нашел способ , чтобы найти високосный год в CoffeeScript.

Однако, поскольку високосные годы имеют дополнительный день, 29 февраля - это не день имени (вместе с 1 января и 25 декабря c), поэтому я хочу отобразить «Без имен» Cегодня!" в те дни, когда это и не високосный год.

command: "date +%j,%Y"  

update: (output) ->
  dateString = output.split(',')

  yearday = parseInt(dateString[0])
  year = dateString[1]

  leapyear = (year % 400 == 0) or (year % 4 == 0 && year % 100 != 0)


  # The Switch statement
  yearday = switch
      when (leapyear and yearday is [1, 60, 360]) then "No names today!"
      else 
        when yearday is 2 then " Aapeli "
        when yearday is 3 then " Elmer, Elmo "
        when yearday is 4 then " Ruut "

        ... and so on

Проблема, с которой я столкнулся, заключается в том, что я получаю ParseError: 'unexpected when'.

Я довольно новичок в создании виджетов (у меня есть идея, как мне это сделать в Python), и у меня возникли некоторые трудности с моим оператором switch.

Я также пытался ввести день месяца (%d) и номер месяца (%e), но я запустил в подобных случаях (несколько, когда условия, например, когда месяц = ​​3 и день = 5 (для 5 мая) не работает).

Любая помощь будет принята с благодарностью. Как я уже сказал, я новичок в CoffeeScript, поэтому объяснения также будут очень полезны.

1 Ответ

0 голосов
/ 13 апреля 2020

Возможно, вы захотите перечитать switch синтаксис

yearday = switch leapyear
  when 2 then 'Aapeli'
  when 3
    if additional_conditionals then A else B
  when 4 then 'Ruut'
  else 'No names today!'
  # else is default, you can't nest additional when statements here

Однако более простым решением было бы вместо этого использовать массив. (Это не совсем о Coffeescript, но относится к размышлениям о программировании в целом.)

dayNames = ['', '', 'Aapeli', 'Elmer, Elmo', 'Ruut']
dayName = (day) => switch day
  when 0 then 'fails, no 0th day' # optional
  when 1, 60, 360 then 'No names today!'
  else "Name of day #{day} is #{dayNames[day]}."

# Additionally, don't prewrite the spaces.
# Use string manipulation like above instead
# (note the difference between single and double quotes)

console.log dayName 4
# 'Name of day 4 is Ruut.'
console.log dayName 60
# 'No names today!'

(Кстати, пожалуйста, удалите дополнительную информацию о днях Финляндии, это просто не имеет значения ..)

Приветствия: )

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...