不幸的是,我的情况比这更复杂一些。我有一个用户模型,其中belongsToMany部门(又是belongsToMany用户),但通过userDepartment手动定义的联接表来实现。我的目标是获取属于给定部门的所有用户。首先我们看一下models/user.js:
var user = sequelize.define("user", {
id: {
type: DataTypes.INTEGER,
field: 'emplId',
primaryKey: true,
autoIncrement: false
},
firstname: {
type: DataTypes.STRING,
field: 'firstname_preferred',
defaultValue: '',
allowNull: false
}
...
...
...
associate: function(models) {
user.belongsToMany(models.department, {
foreignKey: "emplId",
through: 'userDepartment'
});
})
}
...
return user;
Run Code Online (Sandbox Code Playgroud)
现在,看一下models/department.js:
var department = sequelize.define("department", {
id: {
type: DataTypes.INTEGER,
field: 'departmentId',
primaryKey: true,
autoIncrement: true
},
...
classMethods: { …Run Code Online (Sandbox Code Playgroud) 我有一个Scanner已实现scan(&mut self)方法的结构。看起来像这样。
pub struct Scanner {
input: String,
output: Vec<String>,
state: ScannerState,
}
impl Scanner {
pub fn scan(&mut self) {
self.state = ScannerState::CharMode;
for character in self.input.chars() {
match character {
i @ '0'...'9' => self.output.push(format!("Integer digit: {}", i)),
'+' => self.output.push("Addition operator: +".to_string()),
'-' => self.output.push("Subtraction operator: -".to_string()),
'*' => self.output.push("Multiplication operator: *".to_string()),
'/' => self.output.push("Division operator: /".to_string()),
'%' => self.output.push("Modulus operator: %".to_string()),
'^' => self.output.push("Exponent operator: ^".to_string()),
'=' => self.output.push("Assignment operator: =".to_string()),
';' …Run Code Online (Sandbox Code Playgroud) 每次我觉得我有点习惯的Rust有点想通了,它再次打败了我.在这种情况下,我有一个结构State,其中包含一个Vec<Option<Dude>>被调用的ods,其中Dude是一个结构,如下所示:
pub struct Dude {
pub capacity: i32,
pub status: DudeStatus,
}
Run Code Online (Sandbox Code Playgroud)
我想要做的是定义一个State迭代的函数/方法ods.如果Dude给定索引中存在a (即,if ods[i] == Some(Dude)),则将其容量减1,如果这导致capacity==0,则删除Dudefrom ods.不幸的是,我似乎遇到了类型推断和/或所有权问题.这是我的尝试:
fn tick(&mut self) {
for d in &self.ods {
match d {
Some(du) => {
du.capacity -= 1;
if du.capacity == 0 {
d.take();
}
}
None => {}
};
}
}
Run Code Online (Sandbox Code Playgroud)
但是,这会产生3个编译错误:
src/state.rs:40:18: 40:26 error: mismatched types:
expected `&std::option::Option<dude::Dude>`,
found …Run Code Online (Sandbox Code Playgroud)