Scala 模式匹配:在某些情况下什么都不做

问题描述

我必须根据模式匹配块中的案例执行一些操作,但仅限于选择性案例,其余的无需做任何事情。那么对于剩余的情况只返回 () 可以吗?像这样:

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
         _ => 
     }

然而,如果“好的”是指它是否是一个好主意,那么答案是“可能不是”。正如评论中提到的,这不是类型安全的,也纯粹是副作用,而不是引用透明的。可能有更好的方法来做你想做的事。