- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我见过很多次使用 Option(对于简单值)或 Either[List[Error], T] 来处理错误的 scala 代码。
这为这样的代码提供了位置
def createApplicationToken(accessToken: AccessToken): Either[List[Error], ApplicationToken] = {
// go to social info provider and fetch information
retrieveProviderInfo(accessToken).fold(
errors => Left(errors),
info => {
// try to find user using the info from the provider
// if it's not there, create user
User.findOrCreateFromProviderInfo(info).fold(
errors => Left(errors),
user => {
// try to create a fresh token and save it to the user
user.refreshApplicationToken.fold(
errors => Left(errors),
user => Right(user.token)
)
}
)
}
)
这会产生不太好的代码嵌套,迫使您处理每一步的失败,并且还迫使您让所有函数返回 Either[...]
所以我想知道是否
在 scala(或一般的函数式编程)中不鼓励使用异常
使用它们有任何缺点(关于不变性或代码并发性)
异常在某种程度上与函数式编程的原则相冲突
您可以想出更好的方法来编写给定示例
--
一旦使用 return 语句发现错误,就可以通过退出函数来避免嵌套,但在 scala 中也不鼓励使用 return...
最佳答案
以下版本使用 Either
的正确投影是一个 monad,并且与您的代码完全相同:
def createApplicationToken(accessToken: AccessToken) = for {
info <- retrieveProviderInfo(accessToken).right
user <- User.findOrCreateFromProviderInfo(info).right
refr <- user.refreshApplicationToken.right
} yield refr.token
并且更好地展示了Either
的优点。
更一般地说,规则与 Java 中的规则相同:在异常情况下使用异常。您可能会发现,当您以这种方式工作时,您对异常的定义做了一些更改,例如,无效的用户输入并不是真正的异常,超时的网络请求也不是真正的异常。特殊情况等
Either
自 Scala 2.12 起您现在可以省略 .right
,因此以下代码自 Scala 2.12 起是等效的:
def createApplicationToken(accessToken: AccessToken) = for {
info <- retrieveProviderInfo(accessToken)
user <- User.findOrCreateFromProviderInfo(info)
refr <- user.refreshApplicationToken
} yield refr.token
关于scala - 在 scala 中使用异常是一种不好的做法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13012149/
如果您想分享更多信息,可以在这里找到整个资源 指针: https://github.com/sergiotapia/DreamInCode.Net 基本上,我的API将为其他开发人员提供
关闭。这个问题需要更多focused .它目前不接受答案。 想改进这个问题吗? 更新问题,使其只关注一个问题 editing this post . 关闭 5 年前。 Improve this qu
我不是 SCM 工具的经验丰富的用户,尽管我确信它们的用处,当然。 我在以前的工作中使用了一些不起眼的商业工具,在当前的工作中使用了 Perforce,并在我的小型个人项目中使用了 TortoiseS
所以我想知道一些我应该避免在 javascript 中做的事情以获得良好的 SEO 排名。在我的下一个站点中,我将广泛使用 jquery 和 javascript,但不想牺牲 SEO。那么您认为我应该
基本上,我想知道什么是避免 future CSS 代码出现问题和混淆的最佳方法... 像这样命名 CSS 属性: div#content ul#navigation div.float-left (真
我是一名优秀的程序员,十分优秀!