在 Smalltalk 中是否可以使临时变量声明成为可选?

2024-03-12

在编写使用临时文件的 Smalltalk 代码时,您可以编写如下内容:

SequenceableCollection>>#swap: index1 with: index2
    | temp |
    temp := self at: index1.
    self at: index1 put: (self at: index2).
    self at: index2 put: temp.

我发现声明临时变量的语法有点过时且麻烦。实际上,这是您通常停止思考您的领域并专注于计算机的地方之一(您编写了您的方法,您准备好接受代码,但必须“清理”您的临时区域)。它让人分心。

也许临时声明对性能有用?甚至是声明性——无论如何,这可以通过 IDE 调整(如语法突出显示)来改进,但我认为| temp |可以而且应该是可选的。编译器具有所有需要的信息,或者如果用户没有提供临时声明(假设临时位于更近的环境中),则编译器可以做出所需的假设。

实施这样的改变会遇到什么问题?


这是一个依赖于方言的功能。在某些方言中,如果您不声明临时变量,浏览器将在保存方法时为您执行此操作。就我个人而言,我发现这种行为比每次使用未知标识符时浏览器都会向您发出警告的行为更方便,因为正如您所说,这可能会分散您的注意力。通过将临时变量的定义推迟到保存方法时,您不必将思维从域中“转移”;浏览器将完成详细信息。不“手动”声明临时对象的另一个优点是您的方法最终不会声明未使用的临时对象。

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

在 Smalltalk 中是否可以使临时变量声明成为可选? 的相关文章

  • MVC控制器(Controller)与策略模式(Strategy)

    MVC控制器 Controller 与策略模式 Strategy 转载时请注明出处和作者联系方式 http blog csdn net absurd 作者联系方式 Li XianJing
  • function/bind的救赎(上)

    本文转自孟岩的博客 http blog csdn net myan article details 5928531 这是那篇C 0X的正文 太长 先写上半部分发了 Function bind可以是一个很简单的话题 因为它其实不过就是一个泛型
  • csdn大师孟岩老师为本书作序——“未来属于动态语言”

    如果你想掌握Ruby 这本书是最好的起点 如果你想运用Ruby 这本书也是案头必备 所以 如果你已经决定要走入Ruby的世界 那么这本书是必经之路 而本不需要一篇 推荐序 问题在于 我们为什么还要学习一种新的语言 特别是当Ruby整体上仍然
  • 如何在 Smalltalk 中在运行时向类添加方法?

    我正在为基于 XML 的 Web 服务构建 Smalltalk API XML 服务非常常规 我想我应该重写这些方法 而不是手动编写方法 doesNotUnderstand 通过动态添加方法MyApi class gt gt compile
  • 类别和包中的类组织在不同版本的 Pharo 中如何工作?

    有人可以解释一下 Pharo 中的类组织在不同版本的 Pharo 中是如何工作的吗 所有类都是 Smalltalk 全局的一部分 一直都是 似乎一直这样 类可以有一个类别 但这只是一种标签 一直都是 好像还是这样 但有时类别会以某种方式映射
  • Pharo 有 CAS 吗?

    在学习Python时 我发现了SymPy模块 它实际上是一个完整的计算机代数系统 CAS 你可以用它来解决数学中的符号问题 比如微分方程 多项式等等 现在我正在学习 Pharo 我想知道是否有一种方法可以在 Pharo 中进行符号数学运算
  • 法罗双重调度

    有人可以解释一下 Pharo 4 0 中使用 Smalltalk 进行双重调度的过程吗 我是 Smalltalk 的新手 很难掌握这个概念 因为与 Smalltalk 相比 它在 Java 中的实现方式非常不同 如果有人能用一个例子来解释它
  • 如何在 Squeak FFI 中处理 typedef

    我想与一个库 HDF5 进行交互 该库在函数原型和结构定义中只使用自己的 typedef typedef struct H5L type t type Type of link hbool t corder valid Indicate i
  • Pharo Smalltalk 中 = 和 == 有什么区别?

    有什么区别 and 在 Pharo Smalltalk 中 他们叫什么名字 一个isEqual和另一个 equality inequality deep equality inequality shallow 需要考虑的一件重要的事情是 不
  • Smalltalk ReferenceStream 对新实例变量有问题吗?

    在 Pharo Smalltalk 中 我使用 ReferenceStream 序列化对象列表 这是我要序列化的对象的类定义 Object subclass Task instanceVariableNames title notes li
  • 扩展默认类(SmallInteger)

    我正在尝试使用新的实例方法 square 来扩展 SmallInteger 类 我的想法是我希望能够调用 5 square 它会返回 25 使用实例方法扩展您自己的类相当简单 因为您知道变量名称 但我不知道 SmallInteger 类中的
  • 为什么我不能通过 DLL/C-Connect 将 UninterpretedBytes 传递给 void*?

    我想将 UnterpretedBytes 传递给外部库 这样说 MyLibrary gt gt foo buf len len
  • 在 Smalltalk 中重构 if 链而不发生类爆炸

    由于 Smalltalk 不鼓励使用 caseOf 那么有哪些替代方案可以实现以下情况而不导致类爆炸 self condition1 ifTrue self actionForCondition1 ifFalse self conditio
  • 如何在 Pharo/Squeak 中从 WindowsProcess 的 stdin 读取并写入 stdout?

    我找到了一种运行命令的方法Windows 10异步 现在我尝试通过它的标准输入 标准输出与它进行通信 我是通过 Python 完成的 我运行了 python exe 进程 向其发送了一个类似 print 1 9 的字符串 并得到了结果 10
  • 在 Smalltalk 实现中测试 Unicode 支持的正确方法是什么?

    考虑到任何 Smalltalk 风格 我应该如何继续检查 Unicode 是否受支持 如果没有支持 我如何检测缺少哪个级别 VM 字体 转换器等 在VM级别你可以尝试Character codePoint 256 or Character
  • Smalltalk:原语是如何实现的?

    我知道一切都是对象 您可以向 Smalltalk 中的对象发送消息来执行几乎所有操作 现在我们如何实现一个对象 内存表示和基本操作 来表示原始数据类型 例如如何 对于整数的实现 我查看了 Smalltalk 的源代码并发现了这个Smalli
  • 如何在没有副本的情况下向后流式传输集合?

    我想知道如何向后流式传输集合无副本在法罗 吱吱声中 例如 要流式传输 1 2 3 so stream next回报3 then 2 then 1 我知道我可以使用collection reversed readStream but reve
  • 是否可以从命令行运行 Smalltalk 脚本?

    我发现了一个 可能过时且不正确 2004 年的博客文章 http www ianbicking org where smalltalk went wrong html它声称不可能从命令行运行 Smalltalk 脚本 从那时起有什么变化吗
  • 解释一下Smalltalk的一段代码?

    我无法理解这段 Smalltalk 代码 line self upTo Character cr size 0 whileTrue 有人可以帮忙解释一下吗 如果您有代码来源的映像 可以做的一件简单的事情就是在其上运行调试器并单步执行 如果您
  • Pharo 中的绘图表

    我想显示一个值表并能够选择单元格 我该如何在 Pharo Smalltalk 中执行此操作 我听说过 Morphic 小部件能够做到这一点 但我对 Smalltalk 仍然很陌生 我会研究 TreeModel 类的侧面示例 我曾经这样做过

随机推荐