Nim: наложение процедур с побочными эффектами

Я пытаюсь создать указатель на процедуру (или эквивалент). Когда я делаю что-то вроде этого:

import random

# maybe a command line argument
let choice = "some algorithm"

proc withoutSideEffects(): int = 0
proc withSideEffects(): int = rand(10)

let procPtr =
  case choice
  of "algorithm1": withoutSideEffects
  of "algorithm2": withSideEffects
  (...)

компилятор жалуется, требуя, чтобы все процедуры в выражении case имели прагму {.noSideEffects.}

У меня есть следующие вопросы:

  1. Это можно обойти?
  2. Если нет, является ли это намеренным (возможно, для предотвращения плохого дизайна)?
  3. Какие есть альтернативы?

0 ответов

Решение состоит в том, чтобы заменить форму выражения (которая выводит тип возвращаемого значения из первой ветви) формой оператора (той, которая не имеет типа возвращаемого значения)

Та же проблема и такое же решение существует для выражений if/then

let procPtr = block:
  var result:proc():int
  case choice
  of "algorithm1": result = withoutSideEffects
  of "algorithm2": result = withSideEffects
  else: discard
  result
Другие вопросы по тегам