如何在没有 ifs 的情况下根据数字调用 Nim 中的函数?

How to call function in Nim based on a number without ifs?

所以我想编写一个过程,我将向其传递一个数字,它会根据我给它的数字调用其他函数。它可以像这样工作:

#example procs

proc a(): proc =
  echo 'a'
proc b(): proc =
  echo 'b'

proc callProcedure(x:int): proc =
  if x>5:
    a()
  else:
    b()

callProcedure(10)  #calls function a
callProcedure(1)   #calls function b

但是我想在没有ifs的情况下做到这一点。例如,我正在研究以某种方式将对函数的引用存储在数组中并通过其索引调用它,但我无法让它工作并且我怀疑它无法完成(在这种情况下我想了解为什么)。我也对实现相同结果的其他方法感兴趣。我想这样做有多种原因:a)我读过 ifs 很慢(er-ish)等(比如新手应该把优化留给编译器,所以我知道我没有甚至考虑一下,但我还是想尝试这样的事情来学习)b)我认为它开辟了一些可能性,比如在顺序上非常动态以及将调用哪些过程c)只是出于好奇

我看过一些与此相关但无法find/learn我需要从他们那里得到的东西:

PS:我对此很陌生,所以如果我遗漏了一些明显的东西,请随时指出正确的方向。

提前致谢!

您可以将过程存储在数组中,但它们必须属于同一类型:

proc a() =
  echo "a"

proc b() =
  echo "b"

let procs = [a, b]

proc callProcedure(x: int) =
  procs[int(x <= 5)]()

callProcedure(10)  # Calls function a
callProcedure(1)   # Calls function b

您不需要“proc”return 类型。此外,这仍然在幕后使用 x <= 5 的比较,就是这样。而且 if 并不慢。