Дженерики не легки. Дженерики в такой универсальной системе, как Diesel, еще сложнее.
Я предпочитаю разбивать ступени на очень мелких деталей и избегать как можно большего количества цепочек. С этим в игре вам нужно будет добавить границы черт для каждого шага. Хорошая вещь - использовать / создавать псевдонимы типов для очень сложных границ признаков. Diesel предоставляет несколько таких , и вы можете сделать свой собственный для своих особых целей.
Хотя я смотрел на сгенерированные сообщения об ошибках, я в основном смотрел на границы типов, описываемые вызываемыми функциями / методами.
По точкам:
.find
происходит от FindDsl
. delete
требуется IntoUpdateTarget
. delete
- это DeleteStatement
, параметризованный с помощью T::Table
и T::WhereClause
. Это псевдоним пользовательского типа DeleteFindStatement
. .execute
происходит от ExecuteDsl
. use diesel::{
associations::HasTable,
helper_types::Find,
query_builder::{DeleteStatement, IntoUpdateTarget},
query_dsl::methods::ExecuteDsl,
};
type DeleteFindStatement =
DeleteStatement<::Table, ::WhereClause>;
impl DB {
pub fn remove_row(&self, table: Tbl, pk: Pk) -> Result<(), Box>
where
Tbl: FindDsl,
Find: IntoUpdateTarget,
DeleteFindStatement>: ExecuteDsl,
{
let find = table.find(pk);
let delete = diesel::delete(find);
delete.execute(&self.conn)?;
Ok(())
}
}
Вам нужно будет попробовать его самостоятельно для версии filter
, так как вы не предоставили достаточно кода, чтобы сказать, каким должен быть id
; как показано в вашем сообщении об ошибке.
См. Также:
Есть ли преимущество в том, что первичный ключ является универсальным, даже если он
blockquote>&str
во всех случаях?Для меня проще использовать универсальный тип, чем вставить набор общих параметров времени жизни.
Быстрый ответ:
foreach (var process in Process.GetProcessesByName("whatever"))
{
process.Kill();
}
(оставьте .exe в имени процесса)
Можно Уничтожить определенный экземпляр MS Word.
foreach (var process in Process.GetProcessesByName("WINWORD"))
{
// Temp is a document which you need to kill.
if (process.MainWindowTitle.Contains("Temp"))
process.Kill();
}
Вы можете использовать Process.GetProcesses()
для получения текущих запущенных процессов, затем Process.Kill()
для уничтожения процесса.