问题描述
今天跟着文章学习的时候遇到一个问题. 我把这句导入语句
1 | use crate::schema::products::dsl::*; |
放在了顶部, 在下面定义了一个 method:
1 | impl Product { |
结果编译报错:
1 | error[E0308]: mismatched types |
原因
原因出在 use foo::bar::*
的时候, 编译器将 struct id
引入了环境. 然后在 method 定义参数的时候, 编译器认为这里的 id
指的是一个 pattern. 所以报错.
举一个类似的例子:
1 | struct Foo; |
以上例子中, 函数 bar
里定义的 Foo
被编译器认为是一个 pattern, 所以会提示 mismatched types.
解决方案
这里的主要原因是 diesel
的变量名设计存在一些问题. 这里其实用 CamelCase 会更合适.
另外应该避免使用 use foo::bar::*
这样的语法.
那如果不得不用的时候, 特别是针对 diesel
使用的时候, 可以尽量考虑在函数内调用 use
.