如何获取刚创建的新海龟的 ID 号?

How to get the id number of a new turtle just created?

我在孵化新代理时有以下代码,

to t-of-slowdown [ es-poi ]
  if we-look > 0 [
    set we-look (we-look - 1)
    if (we-look <= 0) [
      if es-poi and (not any? events-here) [
        hatch-events 1 [
          set color green
          set size 5
          set is-poi? true
          set new-poi true
          let m [[ end2 ] of cur-link] of myself
          move-to  m ]
        set events-x ([who] of events-here)
        show events-x
        set we-poi-var va-geometric (1 / 1500) + we-ticks poi
        set sera-poi false 
      ]
      set impregna true
      set color red
      set seguir true
      set we-look random-normal 120 20 ;time to watch an event
      ]
  ]
end   

这是 运行 在海龟语境中(步行者品种) 一个步行者正在移动 'link'(另一个调用这个的过程),当计数器 <0 时, 此代码生成一个新事件(事件品种)并将其放置在步行者所在的同一位置(cur-link 是当前步行者 link)。 之后walker必须拿到新事件的id号

set events-x ([who] of events-here)

这里的问题是变量 events-x 得到一个空列表 []。步行者下次经过同一事件时,它会获得事件的编号 ID。

肯定有问题,但我猜不出是什么。 如果有人可以看一下并给我一些帮助,我将不胜感激。

此致

你可以:

let child-who -1
hatch-events 1 [
  ...
  set child-who who
  ...
]
set events-x child-who

或:

hatch-events 1 [
  ...
  let child-who who
  ask myself [ set events-x my-who ]
  ...
]

遗憾的是,这两个都有点笨拙。第二个避免需要将 child-who 初始化为无意义的值,但它需要使用 myself,一个可能使 reader.

神秘化的原语

您可以通过以下方式避免这两个问题:

let parent self
hatch-events 1 [
  ...
  let child-who who
  ask parent [ set events-x child-who ]
  ...
]

(但请注意,对于任何问题,完全使用 who 编号很少是解决任何问题的最佳和最惯用的方法。存储对海龟本身的引用几乎总是更好。)