smalltalk中的信息
我是Smalltalk的新手,我有个问题 我写了这封信:smalltalk中的信息,smalltalk,pharo,Smalltalk,Pharo,我是Smalltalk的新手,我有个问题 我写了这封信: ((Objednavkaset select:[:a | a auto porucha notEmpty]) select: [:d | (d auto porucha select:[:x | x datum_poruchy between: x datum_vypujceni and: x datum_skutecneh
((Objednavkaset select:[:a | a auto porucha notEmpty])
select: [:d |
(d auto porucha select:[:x |
x datum_poruchy
between: x datum_vypujceni
and: x datum_skutecneho_vraceni])
size > 0])
我有这个问题,我需要从这个选择访问datum_vypujceni和datum_skutecneho_vraceni
选择:[:d | d auto porucha选择:[:x | x datum_poruch介于:x datum_vypujceni和:x datum_skutecneho_vraceni之间]]
但我不知道怎么做,有没有办法访问它
这是一张图表,如果你需要的话
你的目标是什么?如果要获取所有至少有一个poruch的Objednavka,并且该poruch的日期介于它所属的Objednavka的其他日期之间,则可以这样做:
(Objednavkaset select: [ :objed |
objed auto porucha anySatisfy: [ :poruchy |
poruchy datum_poruchy
between: objed datum_vypujceni
and: objed datum_skutecneho_vraceni ] ] ]
我也不知道你的闲聊是否有什么好处。如果没有,请告诉我。如果你输入代码,它肯定有,正如我喜欢Uko关于删除初始select:和使用ANYSUPPITE:的答案一样,我认为Jarda的问题仍然没有答案 实际问题是如何访问objed的两个实例变量datum_vypujceni和datum_skutecneho_vraceni,而不是如何编写选择脚本 下面是这个简单问题的答案:Jarda,在Objednavka类中添加两个方法来回答这些实例变量:
datum_vypujceni
^datum_vypujceni
datum_skutecneho_vraceni
^datum_skutecneho_vraceni
一旦有了这些方法,脚本将从objed变量中获取这些数据。还要注意,您需要另一个getter来访问poruchy的数据。因此,请确保您的Poruchy类具有getter方法
datum_poruchy
^datum_poruchy
在您的方法中,您使用auto porucha和d auto porucha。这条长长的链条表明,某些行为可能没有在正确的对象上定义。德米特定律建议减少这些链条,例如,通过在对象上定义此自动指的是porucha Anyder满足的内容:。。。实际上是因为最里面的条件是
x datum_poruchy
between: x datum_vypujceni
and: x datum_skutecneho_vraceni
一切都是x对象的一部分,所以整个条件都应该存在,比如
hasValidPoruchy
^datum_poruchy
between: datum_vypujceni
and: datum_skutecneho_vraceni
我会编辑你澄清你真正想要什么,但我可以提供这么多到目前为止 我认为你的第一级选择:让你更难看清事物。使用anysuccess:将自动过滤掉空的
Objednavkaset select: [:eachSet |
eachSet auto porucha anySatisfy:[:eachPorucha |
eachPorucha datum_poruchy
between: x datum_vypujceni
and: x datum_skutecneho_vraceni]]
如果你想用英语而不是斯拉夫语来调用你的类和方法,我不知道它是什么,但我可以读一下,更多的人会理解你想做什么。请在你的问题上标记你正在使用的Smalltalk,例如Pharo,Squeak,那么,在您选择/筛选后,您想收集/映射出两个基准的变量吗?是这样吗?@Uko:我同意,翻译会很好。使用使用英语库和关键字的语言与非英语使用者编程后,我们总是发现用英语保存代码更容易。我还强烈建议您遵循Smalltalk约定,对方法名使用lowerCamelCase,而不是下划线分隔的命名,并且使用有意义的变量名,而不是a、d和x。Smalltalk的全部目的是让它读起来像一个非程序员几乎可以理解的英语句子。你注意到datum_vypujceni和datum_skutecneho_vraceni与datum_Poruchi?Uko不是同一类人吗,我想他们是。在问题示例中,最里面的select块将三条DATAM_uuu消息发送到x。