【发布时间】:2019-06-04 04:20:11
【问题描述】:
我正在尝试验证 scala 中的配置。首先,我将配置 json 转换为相应的案例类,然后验证它。因为我想慢慢失败,所以我收集所有失败的验证,而不是在第一次验证失败后返回。我打算使用猫库Cats validation提供的应用函子。
我面临的问题是链接中显示的表单验证适用于简单案例类
final case class RegistrationData(username: String, password: String, firstName: String, lastName: String, age: Int)
// Below is the code snippet for applying validation from the link itself
{
(validateUserName(username),
validatePassword(password),
validateFirstName(firstName),
validateLastName(lastName),
validateAge(age)).mapN(RegistrationData)}
// A more complex case for validations
final case class User(name:String,adds:List[Addresses])
final case class Address(street:String,lds:List[LandMark])
final case class LandMark(wellKnown:Boolean,street:String)
在这种情况下,字段“用户名”的验证独立于“名字”的验证。但是如果
- 我不得不对“firstName”和“userName”进行某种类型的验证(假设 Levenstein 距离应该是
- case 类不是由简单的原语 (Int,String) 组成,而是有其他 case 类作为其成员。例如上面提到的用户案例类。
一般来说,应用函子的方法适合这种情况吗?我什至应该收集所有失败的验证吗?
PS:如果提到不正确的地方,请原谅我,我是 scala 的新手。
【问题讨论】:
-
validateNames(firstName, userName)有什么问题?参数的类型有什么关系? -
@Dima validateNames(firstName, userName) 它会返回什么?它是否返回有效的用户名或有效的名字。对不起,你能详细说明一下吗?
-
您选择它返回的内容。这取决于你。
标签: scala validation functor applicative scala-cats