我使用带有 Spring REST 端点的 QueryDSL 谓词对象来检索和查询参数值。
@GetMapping("/{subjectId}/students")
@RolesAllowed( {Roles.PLATFORM_ADMIN, Roles.USER})
public List<StudentResponse> getAllStudents(@PathVariable final String subjectId,
@QuerydslPredicate(root = Student.class) final Predicate predicate) {
final Predicate searchPredicate = studentPredicate()
.predicate(predicate)
.subjectId(subjectId)
.build();
return studentService.findBySubjectId(subjectId, searchPredicate);
}
Run Code Online (Sandbox Code Playgroud)
Student类包含studentId和studentName属性;
现在,如果有人调用https://hostname/ {subjectId}/students?studentId=1234&studentName=test
然后上面的代码生成带有参数值的谓词对象。但是我需要从谓词对象中获取以上 2 个参数值,以便除了数据库查询之外进行进一步处理。我没有看到谓词对象有任何支持方法来检索值。那么我该怎么做呢?
我有一系列谓词子句,像这样
student?.firstName?.equals("John") ?: false &&
student?.lastName?.equals("Smith") ?: false &&
student?.age?.equals(20) ?: false &&
student?.homeAddress?.equals("45 Boot Terrace") ?: false &&
student?.cellPhone?.startsWith("123456") ?: false
Run Code Online (Sandbox Code Playgroud)
我发现可以切换到布尔谓词and()而不是&&,但总的来说,它并没有使代码更简洁。
Kotlin 有没有办法简化这样的表达?
假设我有以下谓词作为 Villager POJO 的预定义 lambda。
val matchesSearch: (Villager, String) -> Boolean =
{ villager: Villager, query: String -> villager.name.contains(query) }
val matchesGender: (Villager, Int) -> Boolean =
{ villager: Villager, filter: Int -> filter == villager.gender }
val matchesPersonality: (Villager, Int) -> Boolean =
{ villager: Villager, filter: Int -> filter == villager.personality }
val matchesSpecies: (Villager, Int) -> Boolean =
{ villager: Villager, filter: Int -> filter == villager.species }
val matchesHobby: (Villager, Int) -> Boolean =
{ villager: …Run Code Online (Sandbox Code Playgroud) 我想使用 Z3 来解决最自然地用原子(符号)、集合、谓词和一阶逻辑表达的问题。例如(伪代码):
A = {a1, a2, a3, ...} # A is a set
B = {b1, b2, b3...}
C = {c1, c2, c3...}
def p = (a:A, b:B, c:C) -> Bool # p is unspecified predicate
def q = (a:A, b:B, c:C) -> Bool
# Predicates can be defined in terms of other predicates:
def teaches = (a:A, b:B) -> there_exists c:C
such_that [ p(a, b, c) OR q(a, b, c) ]
constraint1 = forall b:B there_exists a:A
such_that …Run Code Online (Sandbox Code Playgroud) 如果我们有一个给定的谓词p :: [Bool] -> Bool,它接受无限列表作为参数并返回True或False基于某些未知条件,并且我们不知道这个谓词是什么。
我们能否设计一个函数f :: ([Bool] -> Bool) -> [Bool],采用这样的谓词并返回一个无限列表 l where p l == True,假设谓词是可满足的。
我正在 Xcode 15(测试版)中迁移到 SwiftData,并且很难弄清楚如何在我的一对多模型中形成谓词。期望的结果是返回一个查询,该查询仅返回文章“搜索”字段包含用户正在搜索的字符串的文章和部分。
这是我当前的模型:
@Model
class SectionsSD {
@Attribute(.unique) var id: String
var section: String
var rank: String
var toArticles: [ArticlesSD]?
init(id:String, section: String, rank: String) {
self.id = id
self.section = section
self.rank = rank
}
}
@Model
class ArticlesSD {
var id: String
var title: String
var summary: String
var search: String
var section: String
var body: String
@Relationship(inverse: \SectionsSD.toArticles) var toSection: SectionsSD?
init(id: String, title: String, summary: String, search: String, section: String, body: String) {
self.id …Run Code Online (Sandbox Code Playgroud) 我一直在尝试很多方法来解决这个问题。我正在尝试使用谓词获取 SwiftData 记录。但我尝试的一切都会导致两个错误:
初始化程序“init(_:)”要求“Item”符合“Encodable”
初始化程序“init(_:)”要求“Item”符合“Decodable”
该错误来自扩展#Predicate宏内部。
这是一个简单的类来演示这个问题:
@Model
final class Item {
@Attribute(.unique) var id: String
var timestamp: Date
init(timestamp: Date) {
self.id = UUID().uuidString
self.timestamp = timestamp
}
}
Run Code Online (Sandbox Code Playgroud)
这是导致编译器问题的基本代码:
extension Item {
static func foo() {
let item = Item(timestamp: .now)
let pred = #Predicate<Item> { $0.id == item.id }
}
}
Run Code Online (Sandbox Code Playgroud)
我尝试了很多方法来解决这个错误。我见过的 Apple SwiftData 示例项目都没有出现此错误。
我尝试过遵守Identifiable. 我已经重新命名了该id属性。我已将id类型更改为UUID直接而不是String.
当然,我添加了代码以符合Codable. 虽然这修复了编译器错误,但我最终遇到了运行时错误。请注意,Apple SwiftData 项目的模型均不符合Codable. …
如何在谓词是方法的情况下执行NSArray filteredArrayUsingPredicate?这就是一个简单的代码示例在这里看起来像什么?
我一直试图通过谓词doco并且有点困惑.我可以看到它对于简单检查是如何工作的,但是如果我有一个需要几行objective-c代码的检查来实现代码有效的代码:
谢谢
在Prolog中,如何实现复合逻辑谓词,如(A和B)或(C和D)?
这似乎是一个简单的问题,但许多平易近人的在线教程对布尔表达式不够详细.我假设你不能只写:
test(A, B, C, D) :- cond(A), cond(B); cond(C), cond(D).
Run Code Online (Sandbox Code Playgroud)
那你怎么做的?
在编写一个谓词来测试一个数字是否可以被一定范围内的所有整数整除时,我想知道是否有可能通过"声明"符号制定关于输入的规则?
码:
(defun integer-divisiblep (n m i)
(declare (integer n m i))
(do ((x m (- x 1)))
((< x n) (return t))
(when (not (integerp (/ i x)))
(return nil))))
Run Code Online (Sandbox Code Playgroud)
在这种情况下,我可能想指定输入值"n"必须小于"m".无论如何使用内置功能吗?我似乎无法使用Hyperspec上的声明标识符找到我想要的内容.
此外,我正在使用SBCL,如果这有所作为.