标签: unwrap

Haskell解包数据

如果您有数据类型

data Something = foo Integer 
               | bar Bool
Run Code Online (Sandbox Code Playgroud)

无论如何我有定义"getters"打开Something类型以获得Integer或Bool?现在它就像(foo Integer)和(bar Bool).我只想要Integer或Boolean值.

haskell types unwrap

1
推荐指数
1
解决办法
333
查看次数

为什么使用隐式解包或强制解包让应用程序在某个阶段崩溃没有好处?

我的观点是在某些地方我们知道变量根本不会有 nil 但由于某种原因我们不能在类的 init 函数中实例化它所以我们必须使它成为可选的。

我也知道我们可以使用可选的绑定或保护技术来轻松摆脱它。

但是在我看来,让应用程序因为隐式解包/强制解包而在一些非常愚蠢的错误中崩溃对于开发阶段的开发人员来说是有益的

我的例子是:

class TopStoriesViewModelTests: XCTestCase {
    var viewModel: TopStoriesViewModel!

    override func setUp() {
        super.setUp()
        viewModel = TopStoriesViewModel(interactor: MockTopStoriesInteractor())
    }

    func testArticleDidVisited() {
        viewModel.visited = xxxxxx
    }
}
Run Code Online (Sandbox Code Playgroud)

在这种情况下,我可以制作TopStoriesViewModel一个?then 保护它,或者在每个测试用例中都使用它,但我觉得没有必要。我知道我也可以使用viewModel?.xxx。但这不是重点。

我的问题是,在某些情况下,例如我给出的示例,强制解包/隐式解包是有益的,我是否正确。

optional xctest swift forced-unwrapping unwrap

1
推荐指数
1
解决办法
349
查看次数

有没有什么好的情况我们应该使用“unwrap”?

由于使用unwrap可能会出现问题,因为它在错误场景中崩溃,因此可能被认为是危险的使用。

如果我百分百确定它不会崩溃怎么办,就像在以下场景中一样:

if option.is_some() {
    let value = option.unwrap();
}
Run Code Online (Sandbox Code Playgroud)
if option.is_some() {
    let value = option.unwrap();
}
Run Code Online (Sandbox Code Playgroud)

由于我们已经检查过,Result因此Option使用时不会发生崩溃unwrap()。但是,我们可以使用matchor if let。在我看来,要么match要么if let用法更优雅。

rust unwrap

1
推荐指数
1
解决办法
978
查看次数

如果 option 为 None,为什么在 Rust 中要对 Option.and 中的表达式进行求值?

我不明白,如果选项为 None,为什么要评估 Option.and() 。文档说....

如果选项为 None,则返回 None,否则返回 optb(and() 的参数)。

所以我希望,如果选项不是“无”,则仅(且仅在那时)考虑 and() 。但显然事实并非如此。让我们看看下面的代码......

let n: Option<i32> = None;
let m = n.and(Some(n.unwrap()));
Run Code Online (Sandbox Code Playgroud)

我知道这是一个愚蠢的示例,但这只是为了让我的观点更清楚。

  • 所以 n 是 None
  • 因此我希望在第二行中只有 None 被分配给 m。
  • 但是当运行代码时我感到恐慌,因为它试图解开 n ,它是 None 。当然这会引起恐慌,但是如果 n 为 None,为什么会执行 n.unwrap() 呢?我会假设,如果选项不是 None,则仅对 and() 的表达式进行求值,但显然情况并非如此。我错过了什么?

panic rust unwrap option-type

1
推荐指数
1
解决办法
258
查看次数

三元展开迅速

在 swift 我使用这个代码:

var categories: Results<Category>? //Realm dataType

override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {

    if let categories = categories, !categories.isEmpty {
        return categories.count
    } else {
        return 1
    }
}
Run Code Online (Sandbox Code Playgroud)

我现在希望将 tableView 的代码构建为三元运算符,但不知道如何执行此操作。我找到了以下页面:https : //dev.to/danielinoa_/ternary-unwrapping-in-swift-903但我仍然不清楚。

我试过的是:

return categories?.isEmpty ?? {($0).count} | 1
Run Code Online (Sandbox Code Playgroud)

或者

let result = categories?.isEmpty ?? {($0).count} | 1
return result
Run Code Online (Sandbox Code Playgroud)

但两者都给出错误。知道我该如何解决这个问题吗?

ternary-operator optional ios swift unwrap

0
推荐指数
1
解决办法
582
查看次数

Haskell unwrap也许保持多态性

哈斯克尔再次来到这里.如果我想打开一个Maybe类型并希望保持抽象,我会使用:

fUnwrap :: Maybe a -> a 
fUnwrap (Just n) = n 
fUnwrap Nothing = ???
Run Code Online (Sandbox Code Playgroud)

无论我做什么Nothing,编译器一直在唠叨如何更具体地说明Nothing......你们可以帮助我吗?

haskell maybe unwrap

0
推荐指数
1
解决办法
174
查看次数