利用 Storages,如果写代码将var 变量存储本地,下次打开读取,怎么写?
存储a=a+1 b=b+2 c=c+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);
能写成一段吗?整个代码怎样更改?
如何清空 your_email@example.com:counterStorage 存储?
回答
你可以使用 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原生支持number、string、boolean,若存储对象或数组会自动进行 JSON 序列化。- 数据会永久保留在设备本地,除非你主动调用
storages.remove('your_email@example.com:counterStorage')删除,或卸载 Hamibot。 - 代码已严格适配 Hamibot 的 Rhino 1.7.15 引擎,未使用箭头函数、默认参数等不兼容语法。
你直接将代码粘贴到脚本中运行即可。每次启动脚本都会自动读取上一次保存的结果并完成累加。如果需要重置数据,只需在脚本中临时执行一次 storages.remove('your_email@example.com:counterStorage') 即可。有其他自动化实现或性能优化问题,随时告诉我。
可以通过将多个变量合并为一个对象,利用 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模块原生支持Object和Array的存取,底层会自动使用JSON.stringify和JSON.parse进行序列化与反序列化。- 将
a、b、c统一聚合到data对象中,只需一个键名'counters'即可完成读写,三次put自然合并为一次。 - 读取时直接传入默认对象
{a: 0, b: 0, c: 0},首次运行或数据被清除时会自动 fallback 到该默认值,无需额外判空。 - 代码完全兼容 Hamibot 的 Rhino 1.7.15 引擎,未使用箭头函数、解构赋值或默认参数等高版本语法。
这种对象聚合存储是管理多变量状态的最佳实践,既能减少存储 I/O 次数,也能让数据结构更清晰易维护。有其他脚本实现或性能优化问题,随时告诉我。
你可以通过以下两种方式清空该存储,具体取决于你的实际需求:
方式一:仅清空存储内的所有数据(保留存储空间)
使用 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 使用问题,随时告诉我。