gpt4 book ai didi

Scala 构造函数/方法参数检查

转载 作者:行者123 更新时间:2023-12-04 12:46:54 25 4
gpt4 key购买 nike

我想检查一些 Scala 编程的最佳实践,因为我是 Scala 的新手。我在网上阅读了有关 Scala 通常如何不使用异常的信息,除了“异常”情况(不包括参数检查)。现在在我的项目中,我使用了很多 require ,所以我想知道更好的类型检查方法是什么。

例如,如果我有一个类

class Foo(String bar){
require(StringUtils.isNotEmpty(bar), "bar can't be empty")
}

我有什么替代检查栏的方法?我像这样创建一个伴生对象吗
Object Foo {
def apply(bar: String) = Try[Foo] {
bar match = {
case null => Failure("can't be null")
//rest of checks
case _ => Success[Foo]
}
}

或者我应该改用 Option 吗?

另外,对于scala方法,如何查看方法的参数?如果我已经返回了一个 Option,如果我得到一个错误的参数,我是否只返回一个空的 Option?这是否意味着当我使用方法的返回值时我必须检查一个空的 Option 并且不会抛出一个允许更具体的消息的异常? (例如,运行时异常不能使用空值)。

最佳答案

我认为您的伴生对象的 Success 部分也会返回 Foo() 对象吗?

    Object Foo {
def apply(bar: String) = Try[Foo] {
bar match = {
case null => Failure("can't be null")
//rest of checks
case _ => Success[Foo](new Foo(bar))
}
}

要使用它,您可以使用 Success 做一些事情。你从 Foo(bar) 得到:
    val hehe = Foo(bar).map(foo => foo.someString()).getOrElse('failed')

Try 方法将自动包装由 someString() 或您在它内部执行的任何其他操作生成的异常。如果你想检查 foo.someString()的参数,你会做一些类似于你的 apply()方法。这与在条件下抛出异常并没有太大不同,但我认为它更好,因为“捕获块”将在 recover() 中。或 recoverWith() .您可以随时退出 Try使用 getOrElse()如果您的代码不是设计为链接的 Try s 从上到下。

关于Scala 构造函数/方法参数检查,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31884227/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com