条件作为 for 理解循环中的函数
Condition as function in for comprehension loop
我想在我的 for-comprehension 循环中使用自定义条件函数来进行灵活查询:
def findNewsletterUsers(f: (NewsletterUsers, NewsletterStatuses) => Boolean) = {
for {
u <- NewsletterUsers
s <- NewsletterStatuses if (u.statusId === s.id)
d <- NewsletterDelays if (u.delayId === d.id)
if f(u, s)
} yield (u, d, s)
}
我想用上面一层填充的实际自定义条件来调用此方法。类似于:
findNewsletterUsers((nu, ns) => ns.name == 'C')
此调用 returns 没有行(虽然它应该)。有什么办法让它这样工作吗?
此致
在 slick 中一个容易犯的错误是使用 ==
运算符而不是 ===
运算符。
在您的情况下,您使用函数 (nu, ns) => ns.name == 'C')
。这个函数总是 returns false 因为 ns.name 不是 Char
而是 Rep[Char]
.
要解决这个问题,您只需将==
替换为===
,slick会自动将文字字符'C'
提升为Rep[Char]
.
我想在我的 for-comprehension 循环中使用自定义条件函数来进行灵活查询:
def findNewsletterUsers(f: (NewsletterUsers, NewsletterStatuses) => Boolean) = {
for {
u <- NewsletterUsers
s <- NewsletterStatuses if (u.statusId === s.id)
d <- NewsletterDelays if (u.delayId === d.id)
if f(u, s)
} yield (u, d, s)
}
我想用上面一层填充的实际自定义条件来调用此方法。类似于:
findNewsletterUsers((nu, ns) => ns.name == 'C')
此调用 returns 没有行(虽然它应该)。有什么办法让它这样工作吗?
此致
在 slick 中一个容易犯的错误是使用 ==
运算符而不是 ===
运算符。
在您的情况下,您使用函数 (nu, ns) => ns.name == 'C')
。这个函数总是 returns false 因为 ns.name 不是 Char
而是 Rep[Char]
.
要解决这个问题,您只需将==
替换为===
,slick会自动将文字字符'C'
提升为Rep[Char]
.