我如何 运行 来自另一个堆栈命令的命令?

How can I run a command from inside another stack command?

我在查找遥测数据的堆栈中有一个回调处理程序。当它得到一些时,我解析它然后想保存它。但是,要保存它需要同一堆栈中的其他函数和命令。

我可以把它放在卡片上,但是放在哪里?我用的是openCard end openCard 卡里就这些了

堆栈具有我需要的所有函数和命令。没有按钮可以按下 运行 保存代码 - 我需要它自动 运行。

我怎样才能把代码块放在卡片上然后得到堆栈'call it'?

我知道如何从卡中调用命令,但不知道如何从堆栈中调用命令。

通常,您只需调用内联命令处理程序或函数处理程序即可:

on mouseUp -- a "main" handler
  doSomething -- a command handler 
  dosomethingElse -- another command handler 
  put doYetAnotherThing(paramList) into field 1 -- a function handler
end mouseUp

on doSomething
  well, do something
end doSomething

on doSomethingElse
  you get the picture
  ...

尝试制作一个简单的主处理程序,为上面的三个 "subRoutine" 调用中的每一个调用做一些愚蠢的琐事。您将在几个小时内成为专家。 必须管理三者的位置。通常,它们驻留在主处理程序所在的脚本中。但他们可以在 LC 的任何地方。

如果您想从另一个脚本调用卡片(或任何其他控件)中的处理程序,您可以使用以下命令之一:

  • dispatch "command" 到 control with param1, param2, …
  • 发送命令”到控制[在时间内]
  • (命令,控制)放入tResult

即使 命令 没有被 控制 处理,调度也会愉快地继续。你当然可以检查一下。 Send 的优点是您可以及时安排发送转发,但如果您还想发送一些参数会有点困难。 如果您调用函数并希望返回结果,值是很好的候选者。

请注意,“"openCard" 和 "preOpenCard" 消息可以被捕获并在堆栈脚本中工作,只要卡片脚本中没有这样的处理程序。即使有,你可以 "pass" 在卡片脚本处理程序完成处理后的每条消息";

尝试在堆栈上创建一个命令,当用户在该卡上时每调用 X 次。必须对其自身以及用于获取数据的其他操纵器调用此命令。这个机械手将负责保存数据。

# Code on the card
local sTelemetryData

on openCard
 // If the card belongs to the pile where all the telemetry is or if this pile is a library.
 getTelemetryData
// otherwise you will have to call the getTelemetryData command. You can use send, disparsh, or call.
// call "getTelemetryData" to stack "stack name"
end openCard

# Code on the stack
constant kTime = 100
local sPendingMessageID

on getTelemetryData
   
   if the short name of this card is not "TelemetryData"
   then exit getTelemetryData
   
   if sPendingMessageID is a number
   then cancel sPendingMessageID
   
   // call the commands and functions that look up the telemetry data.
   // The data must be stored in the sTelemetryData variable to save it and at once use this variable as a flag
  
   if sTelemetryData is not empty then
      // The data is sent to be saved
   end if
   
put empty into sTelemetryData
   send "getTelemetryData" to me in kTime milliseconds
   put the result into sPendingMessageID
end getTelemetryData