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

能否在Scratch扩展中创建列表?字符串分割列表实现方法咨询

实现Scratch扩展的字符串分割列表Reporter积木

完全可行,Scratch 3.0的扩展API支持自定义reporter积木,你可以通过以下方式实现需求:

核心实现思路

  1. 定义一个返回列表类型的reporter积木,接收待分割字符串和分隔符两个参数;
  2. 实现字符串分割逻辑,处理边界情况(比如空分隔符);
  3. 可选:额外提供一个命令积木,直接将分割结果存入指定列表变量(对应你提到的设置列表的需求)。

完整代码示例

(function(Scratch) {
    'use strict';

    class StringSplitExtension {
        getInfo() {
            return {
                id: 'stringsplit',
                name: '字符串分割工具',
                blocks: [
                    // 返回分割后列表的Reporter积木
                    {
                        opcode: 'splitStringToList',
                        blockType: Scratch.BlockType.REPORTER,
                        text: '将字符串 [TEXT] 按分隔符 [SEP] 分割为列表',
                        arguments: {
                            TEXT: {
                                type: Scratch.ArgumentType.STRING,
                                defaultValue: '猫,狗,兔'
                            },
                            SEP: {
                                type: Scratch.ArgumentType.STRING,
                                defaultValue: ','
                            }
                        },
                        returnType: Scratch.ReturnType.LIST
                    },
                    // 直接存入指定列表的Command积木(可选)
                    {
                        opcode: 'splitAndSetList',
                        blockType: Scratch.BlockType.COMMAND,
                        text: '把字符串 [TEXT] 按分隔符 [SEP] 分割后存入列表 [LIST]',
                        arguments: {
                            TEXT: {
                                type: Scratch.ArgumentType.STRING,
                                defaultValue: '猫,狗,兔'
                            },
                            SEP: {
                                type: Scratch.ArgumentType.STRING,
                                defaultValue: ','
                            },
                            LIST: {
                                type: Scratch.ArgumentType.LIST,
                                defaultValue: '动物列表'
                            }
                        }
                    }
                ]
            };
        }

        splitStringToList(args) {
            const inputText = args.TEXT || '';
            const separator = args.SEP || '';
            // 空分隔符时按单个字符分割
            return separator === '' ? inputText.split('') : inputText.split(separator);
        }

        splitAndSetList(args, util) {
            const inputText = args.TEXT || '';
            const separator = args.SEP || '';
            const targetListName = args.LIST;
            const splitResult = separator === '' ? inputText.split('') : inputText.split(separator);
            
            // 通过runtime的变量管理器操作列表
            const variableManager = util.runtime.variableManager;
            // 获取目标列表,不存在则创建
            let targetList = variableManager.getList(targetListName);
            if (!targetList) {
                targetList = variableManager.createList(targetListName);
            }
            // 设置列表内容
            variableManager.setListValue(targetList.id, splitResult);
        }
    }

    Scratch.extensions.register(new StringSplitExtension());
})(Scratch);

关键细节说明

  • Reporter积木返回列表:通过设置returnType: Scratch.ReturnType.LIST,让积木返回的数组被Scratch识别为列表类型,用户可直接将其赋值给项目中的列表变量。
  • 列表变量操作:你提到的Scratch.variables.setList并非Scratch 3.0扩展API的标准全局方法,正确做法是通过util.runtime.variableManager提供的getList、createList、setListValue方法来操作列表变量。
  • 边界处理:针对空分隔符的情况,自动切换为按单个字符分割,避免异常行为。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 08:40:14