我有一个辅助函数,可以用6种不同的方式对记录列表进行排序。
sortResults : SortableField -> SortOrder -> List RecsysResult -> List RecsysResult
sortResults sortOnField sortOrder results =
let
reverse =
case sortOrder of
TypeAlias.ASC ->
False
TypeAlias.DESC ->
True
field =
case sortOnField of
TypeAlias.MHID ->
.mhid
TypeAlias.NAME ->
.name
TypeAlias.SCORE ->
.score
sortedResults =
List.sortBy field results
newResults =
if reverse then
List.reverse sortedResults
else
sortedResults
in
newResults
即使没有调用所述函数,编译器也会给我一个错误。
函数
sortBy
的第二个参数导致不匹配。42 | List.sortBy字段结果 ^^^^^^^函数
sortBy
期望第二个参数为:List { mhid : String, name : String, score : String }
但它是:
List RecsysResult
提示:
score
字段中的问题。
RecsysResult只是记录的类型别名
type alias RecsysResult =
{ name : Name, mhid : Mhid, score : Score }
Name
和Mhid
只是字符串的类型别名,而Score
是Float的类型别名。
所以基本上编译器需要一个{ name : String, mhid : String, score : String }
列表,但我正在使用{ name : String, mhid : String, score : Float }
。
答案 0 :(得分:4)
field
在所有分支(... -> String
或... -> Float
)中都有不同的类型,因此Elm将其替换为... -> String
。
newList =
case sortOnField of
TypeAlias.MHID ->
List.sortBy .mhid results
TypeAlias.NAME ->
List.sortBy .name results
TypeAlias.SCORE ->
List.sortBy .score results