相关疑难解决方法(0)

Scala类型关键字:如何在多个类中使用它

在编写Haskell的拼写之后回到Scala,我开始使用type关键字使我的类定义更具可读性,例如:

type RestfulParams = Map[String, String]
def canonicalize(params: RestfulParams): String = { ... }
Run Code Online (Sandbox Code Playgroud)

我遇到的麻烦是这些类型定义需要存在于类或对象中 - 它们不像Haskell中的"一等公民".如果我尝试在类或对象之外定义类型,我会得到一个编译器expected class or object definition.

那么我的问题是如何在包中的多个类和对象中使用这些类型?我现在所做的事情看起来很难看:

object RestfulTypes { type RestfulParams = Map[String, String] etc }
Run Code Online (Sandbox Code Playgroud)

然后在另一个类文件中:

import utils.{RestfulTypes => RT}
def get(resource: String, params: RT.RestfulParams): String = { ... }
Run Code Online (Sandbox Code Playgroud)

有没有更好的方法来做到这一点 - 顺便说一句,Scala大师认为类型只能在类/对象中定义是好事还是坏事?

types scala

70
推荐指数
3
解决办法
3万
查看次数

什么是Scala等效于Java构建器模式?

在我每天用Java做的工作中,我使用构建器来进行流畅的接口,例如: new PizzaBuilder(Size.Large).onTopOf(Base.Cheesy).with(Ingredient.Ham).build();

使用快速而肮脏的Java方法,每个方法调用都会改变构建器实例并返回this.不可避免地,它涉及更多的打字,在修改之前首先克隆构建器.构建方法最终会对构建器状态进行繁重的处理.

什么是在Scala中实现相同的好方法?

如果我想确保onTopOf(base:Base)只调用一次,然后只调用with(ingredient:Ingredient)并且build():Pizza可以被称为a-la定向构建器,我将如何进行此操作?

java design-patterns scala

55
推荐指数
4
解决办法
2万
查看次数

使用Either处理Scala代码中的失败

Optionmonad是一种很好的表达方式来处理Scala中的某些东西或者什么都没有.但是如果在"无"发生时需要记录消息呢?根据Scala API文档,

Either类型通常用作scala.Option的替代,其中Left表示失败(按惯例),Right表示类似于Some.

但是,我没有运气找到使用Either的最佳实践或涉及处理失败的Either的良好实际示例.最后,我为自己的项目提出了以下代码:

    def logs: Array[String] = {
        def props: Option[Map[String, Any]] = configAdmin.map{ ca =>
            val config = ca.getConfiguration(PID, null)
            config.properties getOrElse immutable.Map.empty
        }
        def checkType(any: Any): Option[Array[String]] = any match {
            case a: Array[String] => Some(a)
            case _ => None
        }
        def lookup: Either[(Symbol, String), Array[String]] =
            for {val properties <- props.toRight('warning -> "ConfigurationAdmin service not bound").right
                 val logsParam <- properties.get("logs").toRight('debug -> "'logs' not defined in the configuration").right
                 val array <- checkType(logsParam).toRight('warning -> "unknown type of …
Run Code Online (Sandbox Code Playgroud)

functional-programming scala either

50
推荐指数
3
解决办法
2万
查看次数