小信息中的消息

时间:2015-04-29 08:23:03

标签: smalltalk

我是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_vypujcenidatum_skutecneho_vraceni

select: [:d | (d auto porucha select:[:x | x datum_poruchy between: x datum_vypujceni and: x datum_skutecneho_vraceni]]

但我不知道怎么样,有没有办法访问它?

以下是您需要的图表。

diagram

4 个答案:

答案 0 :(得分:3)

尽管我喜欢Uko关于删除最初select:以及使用anySatisfy:的答案,但我认为Jarda的问题仍然没有答案。

实际问题是如何访问datum_vypujceni的两个实例变量datum_skutecneho_vraceniobjed,而不是如何编写选择脚本。

所以,这是这个简单问题的答案: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:。如果没有 - 让我知道。如果你在中编码,那肯定有

答案 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]]