问题描述
我必须根据模式匹配块中的案例执行一些操作,但仅限于选择性案例,其余的无需做任何事情。那么对于剩余的情况只返回 () 可以吗?像这样:
delimiter //
CREATE FUNCTION f_consultar_stock(nom VARCHAR(50),can INT)
RETURNS INT
BEGIN
DECLARE v_valor INT;
set v_valor = 0;
IF (SELECT stock FROM producto WHERE nombre = nom) > can THEN
SET v_valor = 1;
ELSE
SET v_valor = 0;
END IF;
RETURN v_valor;
END //
解决方法
通常可以,如果 match
中的所有 case 都导致 Unit
(在 Scala 中拼写为 ()
),则在 ()
中生成 case 以保持详尽性.
也就是说,在这种情况下,您需要定义第一个 Option
以执行任何操作,我可能会表示为:
x.foreach { number =>
y match {
case Some(text) =>
??? // note that { } aren't required in match and ??? is idiomatic for "some code here"
case None =>
???
}
}
再说一次,我特别不喜欢 Option
上的模式匹配,所以 ymmv。
取决于您所说的“好的”是什么意思。如果你问它是否会编译,你可以很容易地自己回答这个问题,通过在 REPL 中运行一些片段并找出你甚至不需要返回一个单元。像这样的东西工作得很好:
"foo" match {
"bar" => "baz"
"bat" => 1500
_ =>
}
然而,如果“好的”是指它是否是一个好主意,那么答案是“可能不是”。正如评论中提到的,这不是类型安全的,也纯粹是副作用,而不是引用透明的。可能有更好的方法来做你想做的事。