我有一些代码的问题。
如果我写, Recenzes select: [:a | a komponenta nazev = 'Hitachi P21']我会得到一些正确的记录。但如果我使用这样的东西:
| brzdy |
brzdy := (((
(Sekces select: [:b | b nazev = 'Brzdy']) collect: [:b | b komponenty]) flatten)
select: [:c | c vyrobce nazev = 'Hitachi']) collect: [:d | d nazev].
Run Code Online (Sandbox Code Playgroud)
我可以使用 ^ 命令获得“Hitachi P21”。但是如果我在这里使用变量“brzdy”:Recenzes select: [:a | a komponenta nazev = brzdy]我什么也得不到。
简而言之。我想显示“Komponenty”的“Recenzes”,它们位于“Sekces”中,值为“Brzdy”,它们保存在“Recenzes”和“Sekces”的“Komponenty”(集)列中。
有谁知道为什么?
由于brzdy是#collect:消息的结果,因此它是字符串的集合,而不是单个字符串。因此没有元素a会满足条件a komponenta nazev = brzdy,因为您将比较不同类的对象。尝试一些关于
Recenzes select: [:a | brzdy includes: a komponenta nazev]
Run Code Online (Sandbox Code Playgroud)
作为一个侧面说明,请记住,您可以通过使用消除一些括号select:thenCollect:比其他(select: blah) collect: bluh。例如
brzdy := (Sekces select: [:b | b nazev = 'Brzdy'] thenCollect: [:b | b komponenty]) flatten
select: [:c | c vyrobce nazev = 'Hitachi']
thenCollect: [:d | d nazev]
Run Code Online (Sandbox Code Playgroud)
(我对这个#flatten消息不熟悉,所以我不知道这是必要的还是多余的)。