如何在scala中删除用于验证用户信息的模式匹配?

问题描述 投票:0回答:1

我是 Scala 新手,因为到目前为止我一直是 Java 开发人员。

我有一个登录功能,就像用户可以拥有多个密码一样:

def login(User user) : Boolean = {
 String username = user.username
 String password = user.password

 (username, password) match {
   case("Amit","AmitSecret1" | "AmitSecret2") => true
   case("Rahul","Atemporary") => true
   case("Tom","Howareyou") => true
   case("Roger","Dummy") => true
   ...
   ... // lot of other cases
   case("_","_") => false
 }

}

是否有其他方法可以在不进行模式匹配的情况下验证登录检查,并且不涉及每个组合的case

寻找积极的回应。

scala switch-statement pattern-matching
1个回答
0
投票

你可以有一个

Map[Username, Set[Password]]
然后你可以这样做:

def login(user: User): UserStatus = {
  map.get(key = user.username).fold(ifEmpty = UserDoesNotExist) { passwords =>
    if (passwords.contains(user.password))
      AuthenticatedUser
    else
      BadPassword
  }

我刚刚编造了整个

UserStatus
ADT,但我希望意图很明确。

© www.soinside.com 2019 - 2024. All rights reserved.