匹配以下数据时
this.setState(prevState => ({
product: { ...prevState.product, ingredients: prevState.product.ingredients.filter(...) },
}));
使用此模式
let atable = ("Student", [("Id", ["2";"4";"7";"9"]);
("Name", ["Jim";"Linnea";"Steve";"Hannah"]);
("Gender",["Male";"Female";"Male";"Female"]);
("Course",["Geography";"Economics";"Informatics";"Geography"])
]);;
我收到一个错误,告诉我代码正在尝试匹配' a *' b的值,但该模式期望匹配类型unit的值。这有什么不对?
答案 0 :(得分:3)
为避免与atable
的定义混淆,您希望编写的printTable
代码如下:
let rec printTable a = match a with
( )->""
| (title,[data]) -> "\n"^title^"\n\n"^printTable(data)
| [(col,cont)::t] -> col^" "^printTable([t])
其中a
是函数的参数。
关注syntax of pattern matching:“表达式expr与各种模式p1,...,pn顺序匹配。如果其中一个模式(例如pi)与expr的值一致,那么相应的计算分支(expri)被评估。各种模式pi是相同类型的。“
在您的情况下,您打算将表达式a
与3种不同类型匹配:
(title,[data])
属于该类型)(col,cont)::t
是元组列表,因此[(col,cont)::t]
是元组列表的列表,更多这是1个元素的列表。)< / LI>
醇>
编译器假定a
的类型为unit,然后抱怨,因为其他类型不是单元类型。