You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Scala字符串到带参函数的映射实现及自动执行问题求解

解决Scala Map中函数自动执行的问题

问题根源在于你当前的代码中,tagfunction(...)是直接执行函数并将返回值存入Map,所以Map初始化时所有函数都会被调用;而且每次获取map(key)拿到的是函数执行后的结果,而非函数本身,自然无法做到按需执行。

解决方案

将Map的值类型改为无参函数(闭包),让函数仅在你主动调用时执行:

修改后的Map代码

val h = scala.collection.mutable.Map(
  "01" -> (() => tagfunction(2, "Tag Length", "ToInt")),
  "02" -> (() => tagfunction(1, "Firmware version", "ToInt")),
  "03" -> (() => tagfunction(15, "IMEI", "ToASCII")),
  "04" -> (() => tagfunction(2, "Device ID", "ToInt")),
  "10" -> (() => tagfunction(2, "No of Archive records", "ToInt")),
  "20" -> (() => tagfunction(4, "Date and time", "ToInt")),
  //"30" -> (() => tagfunction(9, "Coordinates", "ToASCII")),
  //"33" -> (() => tagfunction(4, "Speed and direction", "ToASCII")),
  "34" -> (() => tagfunction(2, "Height", "ToSignedShort")),
  "35" -> (() => tagfunction(1, "HDOP", "ToInt")),
  "40" -> (() => tagfunction(2, "Status of device", "ToInt")),
  "41" -> (() => tagfunction(2, "Supply Voltage", "ToInt")),
  "42" -> (() => tagfunction(2, "Battery Voltage", "ToInt")),
  "43" -> (() => tagfunction(1, "Temperature of tracking device", "ToSignedByte")),
)

调用方式

当需要执行对应键的转换逻辑时,调用无参函数:

// 仅执行"01"对应的tagfunction
h("01")()

原理说明

  • 用() => tagfunction(...)将函数调用包装成一个未执行的闭包,Map初始化时只会存储这个闭包对象,不会执行内部的tagfunction。
  • 只有当你调用h(key)()时,才会触发闭包内的tagfunction执行,完全实现按需调用,不会触发其他键的函数。

内容的提问来源于stack exchange,提问作者Nagababu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 18:27:29