利用 Storages,如果写代码将var 变量存储本地,下次打开读取,怎么写?
存储a=a+1 b=b+2 c=c+3

090909 · 3 小时前
第 1 条补充
·
3 小时前

// 文档地址 https://docs.hamibot.com/
// 创建本地存储,建议使用包含邮箱或域名的唯一名称避免与其他脚本冲突
var storage = storages.create('your_email@example.com:counterStorage');

// 读取本地存储的值,若键不存在则返回默认值 0
var a = storage.get('a', 0);
var b = storage.get('b', 0);
var c = storage.get('c', 0);

// 执行累加逻辑
a = a + 1;
b = b + 2;
c = c + 3;

// 将更新后的值重新写入本地存储
storage.put('a', a);
storage.put('b', b);
storage.put('c', c);

log('当前值: a=' + a + ', b=' + b + ', c=' + c);

那以下:
storage.put('a', a);
storage.put('b', b);
storage.put('c', c);
能写成一段吗?整个代码怎样更改?

第 2 条补充
·
3 小时前

如何清空 your_email@example.com:counterStorage 存储?

回答

Hamibot AI
1
· 3 小时前

你可以使用 storages 模块实现变量的持久化存储与跨次运行读取。以下是完整且可直接运行的示例代码:

// 文档地址 https://docs.hamibot.com/
// 创建本地存储,建议使用包含邮箱或域名的唯一名称避免与其他脚本冲突
var storage = storages.create('your_email@example.com:counterStorage');

// 读取本地存储的值,若键不存在则返回默认值 0
var a = storage.get('a', 0);
var b = storage.get('b', 0);
var c = storage.get('c', 0);

// 执行累加逻辑
a = a + 1;
b = b + 2;
c = c + 3;

// 将更新后的值重新写入本地存储
storage.put('a', a);
storage.put('b', b);
storage.put('c', c);

log('当前值: a=' + a + ', b=' + b + ', c=' + c);

核心机制说明:

  • storages.create(name) 会创建或打开指定名称的存储空间。相同名称的存储在不同脚本间数据共享,因此命名务必唯一。
  • storage.get(key, defaultValue) 在首次运行或键不存在时返回你设定的默认值,非常适合变量初始化。
  • storage.put(key, value) 将数据写入本地。storages 原生支持 numberstringboolean,若存储对象或数组会自动进行 JSON 序列化。
  • 数据会永久保留在设备本地,除非你主动调用 storages.remove('your_email@example.com:counterStorage') 删除,或卸载 Hamibot。
  • 代码已严格适配 Hamibot 的 Rhino 1.7.15 引擎,未使用箭头函数、默认参数等不兼容语法。

你直接将代码粘贴到脚本中运行即可。每次启动脚本都会自动读取上一次保存的结果并完成累加。如果需要重置数据,只需在脚本中临时执行一次 storages.remove('your_email@example.com:counterStorage') 即可。有其他自动化实现或性能优化问题,随时告诉我。

ℹ️ 内容由 AI 生成,可能不准确,请注意核实
Hamibot AI
1
· 3 小时前

可以通过将多个变量合并为一个对象,利用 storages 自动序列化对象的特性,将三次 put 操作合并为一次。以下是优化后的完整代码:

// 文档地址 https://docs.hamibot.com/
var storage = storages.create('your_email@example.com:counterStorage');

// 一次性读取包含所有变量的对象,若首次运行则返回默认对象
var data = storage.get('counters', {a: 0, b: 0, c: 0});

// 执行累加逻辑
data.a = data.a + 1;
data.b = data.b + 2;
data.c = data.c + 3;

// 将更新后的整个对象一次性写入本地存储
storage.put('counters', data);

log('当前值: a=' + data.a + ', b=' + data.b + ', c=' + data.c);

核心改动说明:

  • storages 模块原生支持 ObjectArray 的存取,底层会自动使用 JSON.stringifyJSON.parse 进行序列化与反序列化。
  • abc 统一聚合到 data 对象中,只需一个键名 'counters' 即可完成读写,三次 put 自然合并为一次。
  • 读取时直接传入默认对象 {a: 0, b: 0, c: 0},首次运行或数据被清除时会自动 fallback 到该默认值,无需额外判空。
  • 代码完全兼容 Hamibot 的 Rhino 1.7.15 引擎,未使用箭头函数、解构赋值或默认参数等高版本语法。

这种对象聚合存储是管理多变量状态的最佳实践,既能减少存储 I/O 次数,也能让数据结构更清晰易维护。有其他脚本实现或性能优化问题,随时告诉我。

ℹ️ 内容由 AI 生成,可能不准确,请注意核实
Hamibot AI
1
· 3 小时前

你可以通过以下两种方式清空该存储,具体取决于你的实际需求:

方式一:仅清空存储内的所有数据(保留存储空间)

使用 storage.clear()。适用于只想重置变量值,但后续脚本仍要继续使用该存储的场景。

// 文档地址 https://docs.hamibot.com/
var storage = storages.create('your_email@example.com:counterStorage');
storage.clear();
log('存储内的所有数据已清空');

方式二:彻底删除该本地存储(连同存储空间一起移除)

使用 storages.remove(name)。适用于完全不再需要该存储,或想彻底清理残留数据的场景。

// 文档地址 https://docs.hamibot.com/
var isRemoved = storages.remove('your_email@example.com:counterStorage');
log(isRemoved ? '存储已彻底删除' : '存储不存在');

区别说明:

  • storage.clear() 只移除该存储实例下的所有键值对,存储名称依然有效,下次 storages.create() 同名存储时会得到一个空存储。
  • storages.remove(name) 会直接从系统中抹除该存储及其全部数据,返回 true 表示删除成功,false 表示该存储原本就不存在。

你可以根据脚本的生命周期选择合适的方法。有其他 Hamibot 使用问题,随时告诉我。

ℹ️ 内容由 AI 生成,可能不准确,请注意核实