【发布时间】:2018-03-20 23:57:48
【问题描述】:
我是 Nim 新手,所以这可能是一个迟钝的问题,但是如何创建一个速记别名变量以简化代码?
例如:
import sdl2
import sdl2.gfx
type
Vector[T] = object
x, y: T
Ball = object
pos: Vector[float]
Game = ref object
renderer: RendererPtr
ball: array[10, Ball]
proc render(game: Game) =
# ...
# Render the balls
for ix in low(game.ball)..high(game.ball):
var ball : ref Ball = game.ball[ix]
game.renderer.filledCircleRGBA(
int16(game.renderer.ball[ix].pos.x),
int16(game.renderer.ball[ix].pos.y),
10, 100, 100, 100, 255)
# ...
我想使用更短的别名来访问球的位置,而不是最后一部分:
# Update the ball positions
for ix in low(game.ball)..high(game.ball):
??? pos = game.ball[ix].pos
game.renderer.filledCircleRGBA(
int16(pos.x),
int16(pos.y),
10, 100, 100, 100, 255)
但是,如果我使用var 代替???,那么我似乎在pos 中创建了一个副本,这意味着原始文件没有更新。 ref 是不允许的,let 不会让我改变它。
这似乎是一件很自然的事情,所以如果 Nim 不让你这样做我会很惊讶,我只是在手册或教程中看不到任何内容。
[稍后]好吧,除了“滥用”ptr 来实现这一点,但我认为不鼓励使用 ptr,除了 C API 互操作性。
我希望像 Lisp/Haskell 的 let* 构造...
【问题讨论】:
标签: nim-lang