- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
normalize: sum
| strategy normalizingSum |
strategy := sum collect: [ :each | each max: 0.0 ].
normalizingSum := strategy sum.
^strategy collect: [ :each |
normalizingSum strictlyPositive
ifTrue: [ each / normalizingSum ]
ifFalse: [ 1.0 / Action subclasses size ]
]
Array
类(class)。只是来自函数式语言,我发现自己完全偏离了这里对我的期望。
Array
class 感觉它最终会变成版本控制的噩梦。
Array
继承.这对于我现在正在做的问题可能没问题,但后来我想做一个不同的问题并且不想共享实现。
Array
?
最佳答案
这里的问题来自这样一个事实,即我们只考虑您的收藏应该回答的一条消息:#normalized
.在您的代码中,集合 sum
是需要归一化的对象。因此,很容易说 sum normalized
.但是,我不建议添加 #normalized
至 Array
(或 Collection
)因为您的特定规范化的逻辑不是 Array
固有的: 这取决于 Action
,这看起来是一个在您的项目上下文中有意义的概念。
这并不意味着你永远不应该扩展 Array
带着你的东西。这只意味着,如果您的扩展不是内在的,那么这样的决定需要更多的思考。
在这种情况下,我建议分析是否像 sum
这样的集合。在您的项目中有任何其他固有的行为。在这种情况下,我会考虑使用一个类来表示它们并添加到此类消息中,例如 #normalized
,加上与这些对象相关的任何其他内容。
举个例子,假设你的类名为 StrategyCollection
.你可以在里面定义
strategy
^sum collect: [:each | each max: 0.0].
sum
现在是您类(class)的 ivar。然后你可以定义
normalized
strategy := self strategy.
normalizingSum := strategy sum.
^strategy collect: [:each |
normalizingSum strictlyPositive
ifTrue: [each / normalizingSum]
ifFalse: [1.0 / Action subclasses size]]
normalized
| strategy normalizingSum |
strategy := self strategy.
normalizingSum := strategy sum.
^normalizingSum strictlyPositive
ifTrue: [strategy collect: [:each | each / normalizingSum]]
ifFalse: [strategy class new: sumstrategy size withAll: 1.0 / Action subclasses size]
#max: 0
之外还有其他策略,您可以轻松地调整上面的代码,以便使用
perform:
使其更通用。或者有一个特殊的子类
StrategyCollection
它实现了自己的
#strategy
版本.
Action subclasses size
添加一个方法.一些关于
actionCount
^Action subclasses size
#normalized
中使用它.表达式
Action subclasses size
很脆弱,很可能会出现在其他方法中。例如,如果明天您决定将
Action
的一些子类分组在另一个抽象子类下,
Action
的子类数不会适应这样的重构。更一般地说,您的对象的行为不应该取决于您组织代码的方式,因为这属于抽象的元级别。
关于pharo - 现有的库类应该如何扩展?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54966247/
四处查看图片并搜索“:=”不会产生很快弹出的相关结果。 赋值在 Pharo 图像中的具体位置以及如何实现? 最佳答案 赋值被翻译成字节码指令。对临时变量的赋值转换为 popIntoTemp:,它将当前
是否可以监听类在更改时抛出的事件?我需要知道系统浏览器中某些类中的某些内容(代码、变量等)何时发生变化。 最佳答案 注意,自 Pharo 2.0 以来,现在有一个 SystemAnnouncer 可以
我在 Pharo 中有一个 do: 需要很长时间来处理。我想向用户展示它的进度。这在 Pharo 中是如何完成的? 最佳答案 这里有两种方式: Collection 借鉴了 UIManager 并支持
在 Nautilus 系统浏览器 (Pharo 6) 中,有一个右键单击命令可以Add package... 以及 Add class... 甚至 Add protocol...,但我无法在任何地方找
有时,最好暂时使用已弃用的方法,而不是创建一个项目的多个分支来支持多个版本的 Pharo。至少,我有时就是这样做的。但是,调用已弃用的方法会使我的单元测试在 Pharo 3.0 中失败。 有什么我可以
我在网上查过 @ 的含义Pharo 中的接线员,但找不到任何东西。 Pharo是什么意思@运算符(operator)?例如,为什么25@50评估为:"(25@50)" ? 最佳答案 在 Smallta
我不明白如何创建我自己的 Slot 子类并在 Pharo 中使用它。问题是槽处理代码似乎需要我实现#size 和#index,但我不知道该放什么。 用例是表示配置的类的定义。用户可以指定部分配置,并依
我可能刚刚错过了它们,但我似乎在 Pharo 中找不到任何提及不可变数据结构的内容。来自函数式语言,我发现不可变 map 和 set 在各种场合都很有用。尽管 Pharo 对使用变异有特别的偏见,但如
我正在寻找一种方法,在给定包名称的情况下,加载该包在给定日期的最新版本。 例如: HypotheticalClassLoader loadPackage: 'Athens-Core' onDate:
使用 2.0入门,熟悉 Smalltalk,因此我在图像或“实例”一书中(已过时)找不到工具问题。 寻找输入字段(不是现成的对话框)。喜欢: (TextMorph new) contents: '(e
我正在查看 Pharo Smalltalk 的语法,并且想知道如何实现二进制消息的优先级。 如何声明这样的二进制消息? 系统如何确定一元消息的优先级? 最佳答案 用于实现二进制消息: 是的,例如,您可
对于Pharo的新手,如何创建一个包? MOOC exercise说“使用浏览器创建一个包”,但是如何? 最佳答案 您可以在 3.2 Creating a new Package in Pharo b
我关闭了标题为“Welcome to Pharo 2.0”的工作区。如何再次打开它? 最佳答案 尝试打开一个新的空白工作区并使用右上角的三角形转到“以前的内容”条目。您应该在那里找到默认的“欢迎使用
想要尝试使用 Bloc(基本最低要求:创建一个 BlElement),按照基本说明获取包 here : Metacello new baseline: 'Bloc'; repository
我有一个 C 函数,它将字符串复制到传递给它的缓冲区中: void get_machine(char *buf) { /* do something to acquire the machin
我对法罗相当陌生。我正在运行 Ubuntu Raring Ringtail (13.04) 并使用 Pharo 网站上推荐的 PPA 以及 Pharo 30218 图像,并希望启用中键功能。 (我有一
想要将我的小项目从 Pharo 5 迁移到 Pharo 6.1,当我右键单击我的包及其类时,我很高兴地找到了File Out 选项。我看到它为我的图像目录中的那些工件生成文本文件(我在 Windows
normalize: sum | strategy normalizingSum | strategy := sum collect: [ :each | each max: 0.0
为 Pharo 编写基于模拟的单元测试有哪些不同的选择?今天?各有什么优缺点? 最佳答案 还有Mocketry它提供了一个很好的 DSL 关于Pharo 模拟框架,我们在Stack Overflow上
我正在使用 PharoCloud 为我托管 Pharo 图像。默认情况下,它仅将图像的 ZIP 下载到我的设备;此 ZIP 不包含 .sources 文件。 我正在尝试使用 ZnClient 手动下载
我是一名优秀的程序员,十分优秀!