子类化流

2023-12-30

我有兴趣创建自己的 Stream 子类,并且想知道应该重写哪些方法(部署在 pharo 和 Gemstone 上)。我有一个包含各种类型事物的集合,我希望能够流式传输它的子集,其中包含类的元素。我不想复制集合或使用collect:块,因为集合可能很大。我的第一个用例是这样的:

stream := self mailBox streamOf: QTurnMessage.
stream size > 1
    ifTrue: [ ^ stream at: 2 ]
    ifFalse: [ ^ nil ]

有关要重写哪些方法的任何指示?


在 Smalltalk 中,当我们说Stream我们指的是响应由一些方法(例如 #next、#nextPut:、#contents 等)给出的基本协议的对象。因此,在进一步详细介绍之前,我会说stream at: 2正如您在示例中所说的那样,这不是一个非常合适的表达方式。更合适的表达方式是Stream将会

stream position: 2.
^stream next

所以,你首先要考虑的是你是否正在寻找一个Stream or a Collection。这个基本决定取决于您的对象必须实现的行为。

使用的子类Stream如果您决定要使用#next 枚举元素,即主要按顺序排列。但是,如果您想通过以下方式访问您的元素at: index,使用以下子类对您的对象进行建模SequenceableCollection.

如果您选择流,您将必须决定是否仅访问它们进行读取操作,或者还想修改它们的内容。你对问题的描述似乎表明你只会阅读它们。因此,您必须首先实现的基本协议是

#next "retrieve the object at the following position and advance the position"
#atEnd "answer with true if there are no more objects left"
#position "answer the current position of the implicit index"
#position: "change the implicit index to a new value"

另外,如果您的流是只读的,请将您的类设为ReadStream.

如果您想继承更高级的方法,则还必须实现一些其他附加消息。一个例子是#next:它检索几个连续元素的子集合(其大小由参数给出。)

如果您认为将对象建模为集合会更好,那么您必须实现的基本协议由以下三个方法组成

#at: index "retrieve the element at the given index"
#size "retrieve the total number of elements"
#do: aBlock "evaluate aBlock for every element of the receiver"

(我不认为你的收藏必须支持at:put:.)

最近,我们遇到了您所描述的同样问题,并决定将我们的对象建模为集合(而不是流)。但是,无论您最终将采用哪种方法,我认为您都应该尝试两种方法,看看哪种方法更好。没有人会比您的 Smalltalk 系统给您更好的建议。

顺便说一句,还要注意,如果您有(可排序的)Collection,你会得到一个Stream免费:只需发送#readStream给你的收藏!

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

子类化流 的相关文章

  • 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可以是一个很简单的话题 因为它其实不过就是一个泛型
  • Smalltalk 中的运算符可以过载吗?

    Smalltalk 中是否可以重载运算符 我正在寻找教程 示例 Thanks Smalltalk 中不可能进行方法重载 相反 方法重写和称为的技术的组合双重调度用于实现与其他语言中的运算符重载相同的行为 您可以在数学运算符中找到示例实现 这
  • GNU Smalltalk - 继承和多参数方法/构造函数

    假设我正在尝试将以下 Java 类转换为 GNU Smalltalk public abstract class Account protected String number protected Customer customer pro
  • 函数中的“死方法上下文”错误

    我正在尝试写一个isBinary检查发送行是否包含任何不可打印字符 0 127 范围之外的整数值 的函数 isBinary sline Reached isBinary fn displayNl sline do char for each
  • 类别和包中的类组织在不同版本的 Pharo 中如何工作?

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

    根据我从 Pharo 正则表达式文档中收集到的信息 我可以定义一个正则表达式对象 例如 re foo re bar asRegex 我可以通过以下方式将匹配的正则表达式替换为字符串 re copy foobar blah rebar rep
  • 学习 Smalltalk 最好的免费 IDE 是什么? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 您认为学习 SmallTalk 的好 IDE 是什么 我只是将它用作业余爱好 所以它必须是免费的 你还应该考虑Pharo http pha
  • 子类化流

    我有兴趣创建自己的 Stream 子类 并且想知道应该重写哪些方法 部署在 pharo 和 Gemstone 上 我有一个包含各种类型事物的集合 我希望能够流式传输它的子集 其中包含类的元素 我不想复制集合或使用collect 块 因为集合
  • gst 浏览器无法启动

    我刚刚安装了gst browser VisualGST 通过 Canonical Ubuntu 存储库 因此我尝试通过运行来启动 VisualGSTgst browser在命令行上 但是 我立即收到一个错误 a Smalltalk Stre
  • Squeak Smalltalk,为什么有时简化的方法不起作用?

    2332 2332 reduced 2332 2 reduced 2332 322 reduced 1166 161 2332 3 reduced 2332 3 2332 2432423 reduced 2332 2432423 看看上面的
  • 扩展默认类(SmallInteger)

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

    我想将 UnterpretedBytes 传递给外部库 这样说 MyLibrary gt gt foo buf len len
  • 如何在 Pharo/Squeak 中从 WindowsProcess 的 stdin 读取并写入 stdout?

    我找到了一种运行命令的方法Windows 10异步 现在我尝试通过它的标准输入 标准输出与它进行通信 我是通过 Python 完成的 我运行了 python exe 进程 向其发送了一个类似 print 1 9 的字符串 并得到了结果 10
  • Pharo 5 无头模式下的调试

    我正在无头模式下使用 RFB 运行 pharo 5 海边 pharo vm display null vm sound null app pharo5 Pharo5 0 image no quit 在本地运行良好 带有 XFCE 的 Ubu
  • 在没有 GUI 的服务器上运行 Smalltalk?

    我有一个相当明显的问题 我想在生产服务器上运行 Smalltalk 而不使用图形界面 VW 或 Pharo 甚至 Squeak 可能实现这一点吗 我有一个没有 X 的 VPS 托管 并且希望在 Smalltalk 上运行一些网站 同时使用成
  • 如何在 Seaside 回调中访问 jQuery 事件对象

    基本上 我想将以下内容翻译成 Seaside Smalltalk myDiv bind click function e console log e 除此之外我不想console log事件 但在我的 ajax 回调中访问它 最有希望的方法
  • GNU Smalltalk 80 调试器。如何调试smallcode代码?启动调试器?

    在 GNU Smalltalk 80 中 可以用您自己的普通代码编写 Smalltalk 代码 个人选择的文本编辑器 因此 调试代码非常重要 首先 将文件另存为 txt 文件 然后 您可以使用 工具 从程序员文本编辑器中打开该文件 这里的工
  • 在 Smalltalk 实现中测试 Unicode 支持的正确方法是什么?

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

    我看到很多 Net 和 Java 的 IoC 框架 有谁知道为什么 Smalltalk 没有等效的框架 这更像是一个哲学问题 我想知道 Smalltalk 的做事方式中是否有某些东西排除了 IoC 框架的必要性 MVC http en wi

随机推荐

  • 你能在 mdbg 中看到评估堆栈吗?

    假设我有以下 CIL ldc i4 40 lt a breakpoint is set here ldc i4 2 add box int32 call void mscorlib System Console WriteLine stri
  • 使用 Android 提交至 Google 电子表格表单

    第一次在这里提问 通常我不用问就能找到答案 但这一次我陷入了困境 无法弄清楚我错过了什么 我只是想让我的 Android 应用程序在网站上填写表格并提交 我不需要应用程序对发回的任何数据执行任何操作 只需填写表格并提交即可 基本上我正在尝试
  • Dalvik JIT 工作流程

    我对 dalvik vm Android 感兴趣 我试图通过 JIT 的代码来找出它执行的操作以及它如何选择跟踪 我无法遵循代码 因此 我请求所有人帮助我建议 JIT 中执行跟踪选择和翻译的相关函数 你可以尝试 git log grep J
  • 调用命令行程序的Web应用程序框架

    我们正在设计一个 Java EE Web 应用程序 在 tomcat 上运行 它旨在成为命令行程序的网络界面 是否有任何框架 应用程序允许这样做 即 JSP 页面将在内部向安装在与 Tomcat 服务器相同的服务器上的程序发出命令 命令行是
  • 左连接和左外连接的区别

    我想知道mySQL中的LEFT JOIN和LEFT OUTER JOIN是否有什么区别 如果没有区别那为什么会有两种不同的方式呢 提前致谢 它们是相同的 我认为您想要放入 外部 的唯一原因是为了清楚起见 为了澄清联接中的第一个表不需要它在第
  • extjs 面板适合布局

    我有一个面板 我正在将它渲染到一个容器中 我想要panel以适应containerheight 并且不想指定高度panel 但似乎不起作用 有什么办法可以做到吗 代码片段 div style width 100 height 100 div
  • 将 CellRendererToggle 的单行设置为不一致

    在 Gtk 3 上 我使用的是TreeModel存储嵌套信息并用 a 显示它CellRendererText and a CellRendererToggle 用户可以单击每个切换按钮 当存在嵌套按钮并且它们不处于相同状态时 我希望上层按钮
  • React 暴露组件函数

    基于此链接上的示例http reactjs cn react tips expose component functions html http reactjs cn react tips expose component function
  • 带有列表项的 GWT 无序列表

    我完全坚持在 gwt 中创建 css 驱动的菜单 在渲染的结果中 它应该看起来完全像这样 div class topbar div class container fixed h3 a href class logo test a h3 u
  • 制作Python批处理文件

    如何创建一个bat文件来运行python文件 特别是包含pygame bat文件 Simple 只需将以下内容作为批处理文件的第一行 python x 0 goto eof 批处理文件的其余部分是 Python 程序 这是一个完整的例子 p
  • 捕获具有同一组的 和 (thisPartOnly)

    假设我们有以下输入
  • 在 JSF 中验证字段并抛出异常,但将错误消息附加到另一个字段?

    我的页面上有一些需要交叉验证的字段 但我不希望此验证中显示错误
  • 如何从球衣servlet中的curl请求中提取参数?

    我正在以表格形式向我的球衣 servlet 发出一个curl post Restful请求 curl i X POST d debit user id custome mobile number 917827448775 http loca
  • Hive 将 ORC 文件分割成小部分

    create table n data MARKET string CATEGORY string D map
  • 检测 Mono 中的符号链接和管道

    有没有办法使用 C 和 Mono 来区分特殊文件 例如符号链接和管道 该应用程序是一个多平台备份工具 因此我想避免使用互操作库或 C DLL 并寻找直接托管代码解决方案 经过更多研究后 我找到了解决方案 添加参考MonoPosix项目可以访
  • 图像未保存在文件夹中

    我正在尝试创建一个文件夹并在其中保存图像 但这不起作用 我不知道我的代码出了什么问题 你能告诉我为什么吗 The method that invoke of uploading images public void openGallery
  • 将 QLineEdit 设置为仅接受数字

    我有一个QLineEdit用户应仅输入数字 那么是否有一个仅限数字的设置QLineEdit QLineEdit setValidator 例如 myLineEdit gt setValidator new QIntValidator 0 1
  • Microsoft 的 CodeView 格式规范

    我一直在寻找 1990 年代的 Microsoft 文档 名为CodeView 符号调试信息规范 微软在他们的文章中引用了它PE COFF规格 http elfz laacz lv ms exe spec html L61 关于该文档的信息
  • 如何通过VSTS构建和部署SSRS项目?

    我在 VS2015 中创建了简单的 SSRS 项目 我想通过创建构建定义和发布定义步骤来使用 VSTS 构建和部署 SSRS 项目 是否有任何第三方 VSTS 扩展可用 或者对于 SSRS 构建和 SSRS 部署与 SSIS 构建和 SSI
  • 子类化流

    我有兴趣创建自己的 Stream 子类 并且想知道应该重写哪些方法 部署在 pharo 和 Gemstone 上 我有一个包含各种类型事物的集合 我希望能够流式传输它的子集 其中包含类的元素 我不想复制集合或使用collect 块 因为集合