在 Smalltalk 中重构 if 链而不发生类爆炸

2024-02-14

由于 Smalltalk 不鼓励使用 caseOf:,那么有哪些替代方案可以实现以下情况而不导致类爆炸?

self condition1
        ifTrue: [ self actionForCondition1 ]
        ifFalse: [ 
            self condition2
                ifTrue: [ self actionForCondition2 ]
                ifFalse: [ 
                    self condition3
                        ifTrue: [ self actionForCondition3 ]
                        ifFalse: [ ....  ] ] ]

具体要看你的条件怎么样?

  • 如果您的条件是型式试验

    anObject isKindOf: aClass
    

    您可以在类上分派,这意味着您可以调用一个操作方法anObject.

  • 如果你的条件是平等测试

    anObject = anotherObject
    

    您可以使用字典,其中对象作为键,操作作为块闭包。

  • 作为最后的手段,如果没有其他帮助,您可能需要重写建议的代码以避免不必要的嵌套:

    self condition1
        ifTrue: [ ^ self actionForCondition1 ].
    self condition2
        ifTrue: [ ^ self actionForCondition2 ].
    self condition3
        ifTrue: [ ^ self actionForCondition3 ].
    ...
    
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Smalltalk 中重构 if 链而不发生类爆炸 的相关文章

  • 如何使用 PHP 检查 MySQL 表是否存在?

    理论上听起来很简单 我已经做了相当多的研究 但很难弄清楚这一点 如何检查 MySQL 表是否存在以及它是否执行某些操作 我想一个简单的 php if else 语句可以解决这个问题 有没有办法做到这一点 这就是我对 cwallenpoole
  • #ifdef 与 #if - 作为启用/禁用特定代码部分编译的方法,哪种更好/更安全?

    这可能是一个风格问题 但我们的开发团队存在一些分歧 我想知道是否还有其他人对此事有任何想法 基本上 我们有一些调试打印语句 我们在正常开发期间将其关闭 我个人更喜欢执行以下操作 SomeSourceFile cpp define DEBUG
  • 如何在 Python 中将输入打印为整数、浮点数或字符串

    我的代码的目的是让输出给出输入的数字和类型 例如 如果输入是 10 输出应该是 10 is an integer 如果输入是 10 0 输出应该是 10 0 is a float 如果输入是 Ten 输出应该是 Ten is a strin
  • python 字典中没有值

    是否可以检查 dict 中的无值 dict a None b 12345 c None My code for k v in d items if d k None print good else print Bad 执行上面的代码片段后打
  • Smalltalk 和 IoC

    我看到很多 Net 和 Java 的 IoC 框架 有谁知道为什么 Smalltalk 没有等效的框架 这更像是一个哲学问题 我想知道 Smalltalk 的做事方式中是否有某些东西排除了 IoC 框架的必要性 MVC http en wi
  • XPath:默认为“节点 A”,如果“节点 B”不为空,则选择“节点 B”

    我需要创建一个执行以下操作的 XPath 表达式 默认返回 NodeA 内的元素 如果 NodeB 不为空 则返回 NodeB 内部的元素 下面是一些示例 XML 以便可以清楚地看到我的目标结构 我使用的是 MS InfoPath
  • 如果 netezza 中存在则删除

    我需要一个命令来删除表 如果存在 NETEZZA 类似这样的东西 drop table if exists xxx 我已经搜索并尝试了很多但没有成功 你能帮我一下吗 In netezza你可以使用这个语法 drop table table
  • 根据标准在多个需求之间分配数量

    我正在创建一个周期盘点表 表 1 将是用户输入 其中将放置找到的材料和数量 表 2 是盘点时的库存快照 我希望将找到的材料数量分配到表 2 上的数量中 直到表 1 的数量用完为止 按照从最新批次 日期代码 到最旧批次 先进先出 的顺序分配数
  • try..catch VS long if() [重复]

    这个问题在这里已经有答案了 我的项目中有一个复杂的模型结构 有时我必须得到一个deep从中放置价值 它看起来像下面这样 something getSomethongElse getSecondSomething getThirdSometh
  • Java中构造函数中的长参数列表[重复]

    这个问题在这里已经有答案了 可能的重复 重构具有太多 6 个以上 参数的方法的最佳方法是什么 https stackoverflow com questions 439574 whats the best way to refactor a
  • 定时器启动/停止参数

    自从加入这个社区以来 我在技能和进步方面取得了突飞猛进的进步 你们都是一个巨大的帮助 我无法提供一个计时器 该计时器已在启动和停止时实现了某些参数 我要么收到错误消息 局部变量计时器可能尚未初始化 要么没有收到错误消息 但什么也没有发生 也
  • Crystal Report:如何计算一个公式中的多个 IF 语句?

    背景 我正在尝试对报告的详细信息行进行一些美观的验证 我有几个名为 Assert 语句的公式 如果测试失败则返回 false 如果通过则返回 true Goal 我想创建一个存储 违反规则 的数组 然后将它们显示在行末尾的字段中 标题为 违
  • C# 'if' 绑定值

    我有一个列表视图 由名为 Binding 的类填充House 这是我的代码的示例
  • C# 要么返回 false 要么什么也不做

    我想知道是否有办法不必重复相同的事情如果施工而是调用一个状态检查 成功后无法返回true 有人知道这个问题更好的标题吗 bool Enable if GetStatus ref status Trace WriteLine Error re
  • JavaScript 单行“if”语句 - 最好的语法,这个替代方案吗? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 尽管意见仍然如此 但已经明确指出 放弃单行中的大括号if语句的可维护性和可读性并不理想 但这又如何呢 if lemons document wr
  • 不明白为什么当变量为整数时条件评估为 True

    我正在使用表现出以下行为的代码 假设我有一个变量d我把它赋给一个整数9 d 9 为什么以下语句有效 In 95 if d print d else print Did not print d 9 In 96 当 d 本身不是布尔值且未通过以
  • PHP条件,如果当前页面,则链接突出显示[关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 help reopen questions 我有一个带
  • TFrame继承重构

    我提出的另一个 TFrame IDE 注册组件问题 感谢各位程序员的帮助 尝试 Darrian 的 TFrame 继承建议here https stackoverflow com questions 382562 delphi visual
  • Switch 语句,其中 value 为 Int 但 case 可以包含数组 [重复]

    这个问题在这里已经有答案了 我想将我的值数组作为 switch 语句的案例 我有一个值数组 let intValues 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 100 我想使用
  • 使用 equals 方法比较两个对象,Java

    我有一个对象数组 我想将它们与目标对象进行比较 我想返回与目标对象完全匹配的对象的数量 这是我的计数方法 public int countMatchingGhosts Ghost target int count 0 for int i 0

随机推荐

  • 使用 pscp 或其他工具将文件从 Linux 传输到 Windows

    问题陈述 我想将一些文件从远程计算机 Linux 复制到我的Windows计算机 我知道我可以使用 pscp 来做到这一点 我尝试在互联网上查找 找到了几篇文章 但在这些文章中我无法理解 并且在将文件从 Linx box 复制到 Windo
  • 如何在mathematica中应用涉及一百个变量的规则

    我有一个涉及 x1 x2 x100 的表达式 我还有一个列表lst有 100 个元素 如何将规则应用于此表达式以实现如下所示的效果 exp x1 gt lst 1 x2 gt lst 2 x100 gt lst 100 Thanks exp
  • 使用 MediaProjection 截取屏幕截图

    随着MediaProjectionAndroid L 中提供的 API 可以 将主屏幕 默认显示 的内容捕获到 Surface 对象中 然后您的应用程序可以通过网络发送该对象 我已经设法得到VirtualDisplay工作 以及我的Surf
  • Pandas str.split() 函数无法正常工作

    在尝试使用 Pandas 系列 str split 函数分割数据帧的 Actors 列中的值时 我得到的值比我指定的分割更多 df Actors df Actors str split n 3 1 timrobbins morganfree
  • Windows 上的 Java 串行通信

    我一直在寻找可以与 Windows Win32 上的串行设备通信的 Java API 但我检查过的许多 API 要么适用于 Linux 要么太过时 要么只是受到了批评 有人可以向我推荐一个他们已经尝试过或知道的可以在 Windows XP
  • 如何在 Intellisense 中禁用 JavaScript 浏览器 API 建议

    如何在 VSCode 中禁用 Web API 建议 例如 如果我输入 id 我会得到一堆 IndexDB 建议 如果可能的话我想禁用它 Thanks 是的 VS Code 默认包含 javascript 中的 DOM 补全 要禁用此功能 请
  • 将值设置为特定列时 JTable Java 错误堆栈溢出

    这是我下面的代码 我创建了一个 4 列 3 行的 Jtable 并添加表模型侦听器 在表更改侦听器中 当我在特定列中设置值时 堆栈溢出错误即将到来 error is Exception in thread AWT EventQueue 0
  • 如何使用 Python 的 matplotlib 烛台仅绘制工作日?

    如果没有周末 我无法绘制 matplotlib finance candlestick 每 5 个烛台之间有空格 这来自 Matplotlib 网站的示例 http matplotlib sourceforge net examples p
  • HOG描述符是旋转不变的吗?

    我正在从事杂草检测工作 我已经开始从 HoG 描述符中提取特征 根据 HoG 文献研究表明 HoG 不是旋转不变的 我有每类杂草的总共 18 张图像 有两类 在我的训练和测试数据库中 我将每个图像旋转了 5 10 15 20 355 度 训
  • 如何完成 Google Keep 布局之类的事情

    在 Google Keep 中 他们有几列 取决于您的视口宽度 等宽的注释 它们的排列使其看起来不统一 这样的事情怎么能完成呢 我猜他们在某些宽度上有特定的断点 并且在考虑了填充和边距之后 他们使图像匹配所需的宽度 并且简单地让图像高度保持
  • 如何结束文件的合并?

    在 Git 中合并文件后 我尝试拉取存储库 但出现错误 您尚未完成合并 MERGE HEAD 存在 如何完成合并 检查状态 git status 您的存储库 应添加每个未合并的文件 在您自己解决冲突之后 git add 如果没有未合并的文件
  • 如何获取本地日期时间而不是服务器日期时间

    我正在制作一个Java Web应用程序 其中不同国家的客户需要通过jsp页面上传文件 我必须在Weblogic服务器中部署这个应用程序 现在我想要的是他们的本地日期时间 我不需要服务器日期时间 我应该在我的 java 应用程序中编写什么代码
  • 使用 PowerShell 缩小 JSON?

    有没有办法缩小 在本例中删除所有空格 JSON 文件以将其变成 0 000005 0 0 219 740502 0 003449 4 177065 45 210918 0 003365 16 008996 344 552785 0 0302
  • 使用 jQuery UI“Accordion 和 Droppable”

    我对 jQuery UI Accordion 和 Droppable 有疑问 如何将项目从 tab 1 拖动到 tab 2 我已经在 jqueryui com Sortable Connect Lists with Tabs 中查看了演示
  • angular.js - 用西班牙语包装货币符号和小数

    你能用角度做这样的事情吗 不太可能做到这一点 因为不解析标签或其他东西 10000 currency span span http plnkr co edit WluYoe2Ltmhmhvr8BBWX p preview http plnk
  • Spring 工具套件 - NoClassDefFoundError MappingJackson2XmlHttpMessageConverter

    我是 Spring 的新手 我开始从他的网站学习它 理解Java对我来说并不难 但我对环境有困难 我按照本指南使用 Spring Boot 创建一个新项目 一切都很顺利https spring io guides gs spring boo
  • IIS 7.x,添加启用 HTTPS 的站点:SiteCollection.Add(string, string, string, byte[]) 重载

    我需要以编程方式添加 IIS 7 x 站点 当默认情况下应使用 HTTPS SSL 绑定创建该站点时 我陷入了困境 使用SiteCollection Add string string string byte 重载 http msdn mi
  • 是否可以为 Google 字体指定自定义名称?

    这是一个 CSS 示例 h1 font family header font arial sans serif p font family paragraph font arial serif 是否可以加载任何远程 Google 字体 比如
  • 两个输入相同的表单列占用所有单元格宽度 Bootstrap 3

    我正在尝试移交 Bootstrap 3 但我在网格的新类方面遇到了困难 以前版本的 Bootstrap 允许您通过添加 span 类来设置输入的宽度 因此如果您想将两个输入放在同一表单列上 添加 span 2 和 span 10 即可完成工
  • 在 Smalltalk 中重构 if 链而不发生类爆炸

    由于 Smalltalk 不鼓励使用 caseOf 那么有哪些替代方案可以实现以下情况而不导致类爆炸 self condition1 ifTrue self actionForCondition1 ifFalse self conditio