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.}
У меня есть следующие вопросы:
- Это можно обойти?
- Если нет, является ли это намеренным (возможно, для предотвращения плохого дизайна)?
- Какие есть альтернативы?
0 ответов
Решение состоит в том, чтобы заменить форму выражения (которая выводит тип возвращаемого значения из первой ветви) формой оператора (той, которая не имеет типа возвращаемого значения)
Та же проблема и такое же решение существует для выражений if/then
let procPtr = block:
var result:proc():int
case choice
of "algorithm1": result = withoutSideEffects
of "algorithm2": result = withSideEffects
else: discard
result