我有一个文件main.rs
和一个文件rule.rs
。我想定义函数rule.rs
将被纳入Rules::rule
矢量,而不必将它们一一推动。我更喜欢一个循环来推动它们。
main.rs:
struct Rules {
rule: Vec<fn(arg: &Arg) -> bool>,
}
impl Rules {
fn validate_incomplete(self, arg: &Arg) -> bool {
// iterate through all constraints and evaluate, if false return and stop
for constraint in self.incomplete_rule_constraints.iter() {
if !constraint(&arg) {
return false;
}
}
true
}
}
rule.rs:
pub fn test_constraint1(arg: &Arg) -> bool {
arg.last_element().total() < 29500
}
pub fn test_constraint2(arg: &Arg) -> bool {
arg.last_element().total() < 35000
}
Rules::rule
应该填充test_constraint1
and test_constraint2
.
在Python中,我可以添加一个装饰器@rule_decorator
高于您想要包含在的约束Vec
,但我在 Rust 中没有看到类似的东西。
在Python中,我可以使用dir(module)
查看所有可用的方法/属性。
Python 变体:
class Rules:
def __init__(self, name: str):
self.name = name
self.rule = []
for member in dir(self):
method = getattr(self, member)
if "rule_decorator" in dir(method):
self.rule.append(method)
def validate_incomplete(self, arg: Arg):
for constraint in self.incomplete_rule_constraints:
if not constraint(arg):
return False
return True
使用rule.py文件:
@rule_decorator
def test_constraint1(arg: Arg):
return arg.last_element().total() < 29500
@rule_decorator
def test_constraint1(arg: Arg):
return arg.last_element().total() < 35000
所有功能都带有rule_decorator
被添加到self.rule
列出并由validate_incomplete
功能。