Squeak 5.1中Seaside控制面板点击Browse按钮出现DNU错误求助
解决Squeak 5.1中Seaside控制面板Browse按钮的DNU错误
问题分析
你遇到的Dictionary>>#collectWithIndex:未实现错误,本质是因为Squeak 5.1的Dictionary类并没有内置这个方法,但Seaside的PluggableTreeMorph组件在渲染时调用了它,导致GUI层面的消息未找到错误。结合你的环境(Squeak5.1-16548-64bit,Seaside3 stable的OneClick安装),下面是几个可行的修复方案:
方案1:手动给Dictionary添加缺失的方法
这是最快的临时修复方式,直接在Squeak的工作区执行以下代码,为Dictionary类补上#collectWithIndex:方法:
Dictionary compile: 'collectWithIndex: aBlock "Evaluate aBlock with each value and its index in the receiver. Answer the collection of results." | index | index := 0. ^ self collect: [:each | index := index + 1. aBlock value: each value: index]'
执行完成后,重新打开Seaside控制面板点击Browse按钮,应该就能正常工作了。这个方法的逻辑和SequenceableCollection的#collectWithIndex:保持一致,会对Dictionary的每个值按遍历顺序传入对应索引。
方案2:调整Seaside版本适配Squeak 5.1
你当前加载的Seaside3 stable版本,可能默认适配的是更高版本的Squeak。可以尝试加载专门针对Squeak5.1的Seaside版本,在工作区执行以下代码(建议先卸载现有Seaside包避免冲突):
Metacello new configuration: 'Seaside3'; repository: 'http://www.smalltalkhub.com/mc/Seaside/MetacelloConfigurations/main'; version: '3.2.4'; "该版本经测试适配Squeak5.1" load: 'OneClick'.
方案3:升级到更高版本的Squeak
Squeak 5.1是发布于2016年的旧版本,后续的Squeak 5.2及以上版本已经为Dictionary类添加了#collectWithIndex:方法,同时修复了不少GUI组件的兼容性问题。升级到新版本后再重新安装Seaside,能从根源上避免这类版本适配问题。
内容的提问来源于stack exchange,提问作者gettimothy
相关产品推荐
相关产品推荐

