我是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_skutecneho_vraceni])
size > 0])
我遇到此问题,我需要从此选择中访问datum_vypujceni
和datum_skutecneho_vraceni
select: [:d | (d auto porucha select:[:x | x datum_poruchy between: x datum_vypujceni and: x datum_skutecneho_vraceni]]
但我不知道怎么样,有没有办法访问它?
以下是您需要的图表。
答案 0 :(得分:3)
尽管我喜欢Uko关于删除最初select:
以及使用anySatisfy:
的答案,但我认为Jarda的问题仍然没有答案。
实际问题是如何访问datum_vypujceni
的两个实例变量datum_skutecneho_vraceni
和objed
,而不是如何编写选择脚本。
所以,这是这个简单问题的答案:Jarda,在你的Objednavka
类中添加两个回答这些实例变量的方法:
datum_vypujceni
^datum_vypujceni
datum_skutecneho_vraceni
^datum_skutecneho_vraceni
一旦有了这些方法,您的脚本就会从objed
变量中获取这些数据。另请注意,您需要另一个getter才能访问datum_poruchy
的{{1}}。因此,请确保您的Poruchy
类具有getter方法
Poruchy
答案 1 :(得分:2)
你的目标是什么?如果你想让所有 Objednavka 至少有一个 Poruchy ,它的日期属于它所属的 Objednavka 的其他日期,你可以做它是这样的:
(Objednavkaset select: [ :objed |
objed auto porucha anySatisfy: [ :poruchy |
poruchy datum_poruchy
between: objed datum_vypujceni
and: objed datum_skutecneho_vraceni ] ] ]
我也不知道你的smalltalk是否有#anySatisfy:
。如果没有 - 让我知道。如果你在pharo中编码,那肯定有
答案 2 :(得分:2)
最内层条件是
x datum_poruchy
between: x datum_vypujceni
and: x datum_skutecneho_vraceni
一切都是x对象的一部分,所以整个条件都应该存在,比如
hasValidPoruchy
^datum_poruchy
between: datum_vypujceni
and: datum_skutecneho_vraceni
答案 3 :(得分:0)
当你澄清你真正想要的东西时,我会编辑,但到目前为止我可以提供这么多......
我认为你的第一级select:
会让人更难看到事情。使用anySatisfy:
会自动过滤掉空的。
Objednavkaset select: [:eachSet |
eachSet auto porucha anySatisfy:[:eachPorucha |
eachPorucha datum_poruchy
between: x datum_vypujceni
and: x datum_skutecneho_vraceni]]