标签: optional

如何在Scala中以惯用方式重写此代码?

假设我有一个f: Int => String可能抛出异常的函数.我想写一个函数tryF(f: Int => String, arg: Int, defaultOpt: Option[String]),其工作原理如下:

  • f(arg)如果没有抛出异常,则调用并返回结果
  • 如果调用因异常而失败defaultOpt.isDefined然后返回defaultOpt.get
  • 否则抛出异常

我写的如下:

def tryF(f: Int => String, arg: Int, defaultOpt: Option[String]) = {
  val r = scala.util.Try(f(arg))
  r.toOption orElse defaultOpt getOrElse r.get
}
Run Code Online (Sandbox Code Playgroud)

是否有意义 ?你会改写它吗?

scala exception-handling optional

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

简洁的方式来选择一个选项

是否有更简洁的方法来实现以下目标?

fn boxed_option<T>(thing: Option<T>) -> Option<Box<T>> {
    match thing {
        Some(x) => Some(Box::new(x)),
        None => None,
    }
}
Run Code Online (Sandbox Code Playgroud)

optional rust

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

将Double转换为OptionalDouble的方法

我有一个构建列表的新方法,我希望它将列表的总和作为OptionalDouble值返回.

但是,当我使用Java 8计算总和值时,我总是将返回值作为Double.

我该如何转换?

Double to OptionalDouble
Run Code Online (Sandbox Code Playgroud)

以下是我的和计算代码:

private static OptionalDouble sumListValue() {
     // Build list
     List<Double> testList = new ArrayList<>();
     testList.add(...);
     ...
     ...


     return testList.stream().mapToDouble(value -> value).sum();
}
Run Code Online (Sandbox Code Playgroud)

谢谢.

java sum optional java-8

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

Java-从变量中删除“可选”(转换)

对于一项家庭作业,我必须设置一个变量。给我的set方法将其转换为“可选”。但是,我必须将此变量存储在不允许可选变量的ArrayList中。如何转换该变量使其不再是可选变量?

设置方法:

 public void setParentVertex(IVertex<T> parentVertex)
    {
    if(parentVertex == null)
        this.parentVertex = Optional.empty();
    else
        this.parentVertex = Optional.of(parentVertex);
}
Run Code Online (Sandbox Code Playgroud)

我在尝试使用它的地方:

 ArrayList<IVertex<T>> path = new ArrayList<IVertex<T>>();
 IVertex<T> parent = current.getLabel().getParentVertex();
 path.add(parent);
Run Code Online (Sandbox Code Playgroud)

我不断收到的错误是:“我在其中声明变量“ parent”的那一行出现了“错误:不兼容的类型:Optional>无法转换为IVertex”。谢谢。

java arraylist data-conversion optional

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

混合类型的Nil合并运算符

是否有任何简便的快速简便方法可以获取非String类型的可选值,并获取String值,如果它是.some(),则为该值的String解释;如果它是.none(),则为默认值下列:

let statusCode = (resp as? HTTPURLResponse)?.statusCode
let statusCodeString: String
if let statusCode = statusCode {
    statusCodeString = "\(statusCode)"
} else {
    statusCodeString = "None"
}
Run Code Online (Sandbox Code Playgroud)

对于一个相对简单的事情来说,它似乎太冗长了,感觉就像我缺少明显的东西。

仅使用nil-coalescing运算符不起作用,因为您必须提供相同类型的默认值。

null default-value null-coalescing-operator optional swift

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

在F#中强制任何对象为null

物体可以向任一方向铸造,这是不安全的.如何强制任何对象为null并在生产代码中使用它们?

例如,在Option<'T>,我现在可以轻松地以3种方式,使可空类型:Some (Unchecked.defaultof<'T>),Nonenull.

.net f# types optional

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

如何从函数返回std :: optional <myclass>?

我似乎错过了一些非常简单的事情.以下不起作用:

#include <optional>

class Alpha {
    Alpha() { }
    Alpha(const Alpha& that) { }
    Alpha(Alpha&& that) { }
    ~Alpha() { }

    static std::optional<Alpha> go() {
        return Alpha();
    }
};
Run Code Online (Sandbox Code Playgroud)

我得到的错误是:

no suitable user-defined conversion from "Alpha" to "std::optional<Alpha>" exists 
T in optional<T> must satisfy the requirements of Destructible 
'return': cannot convert from 'Alpha' to 'std::optional<Alpha>'
Run Code Online (Sandbox Code Playgroud)

我错过了什么,你能解释一下原因吗?

c++ optional c++17

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

为什么Java的Optional.of()不接受空值?然后,它不再是真正的“可选”值

我知道Optional.ofNullable()值是否也可以为null。我的问题是,为什么还没有默认行为Optional.of()呢?如果值不能是null,为什么要放在Optional第一个?如果结果还是为空,那么无论如何您都会得到一个NPE。如果您Optional使用of()方法构造一个,那么您仍然会拥有Optional包装器的所有其他方法,只有在值可以为的情况下,它们才真正有目的null

编辑:我已经阅读了为什么在Optional.ofNullable上使用Optional.of?在发布此消息之前,但答案是“因为您可以更快地发现错误,并且以这种方式进行跟踪更容易”。但是我有点不同意,也许您的堆栈跟踪中会包含一些额外的行,但是仍然很容易查明NPE的来源。

java optional java-8

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

将ifPresent与orElseThrow一起使用

因此,我必须丢失一些东西,如果要使用Optional,我希望执行一个语句块,否则会引发异常。

Optional<X> oX;

oX.ifPresent(x -> System.out.println("hellow world") )
.orElseThrow(new RuntimeException("x is null");
Run Code Online (Sandbox Code Playgroud)

如果oX不为null,则打印hello world。如果oX是,null则抛出运行时异常。

java optional

0
推荐指数
2
解决办法
87
查看次数

if / else的可选方式

我试图通过使用Java Optional来避免传统的if / else阻止。但是我仍然缺少对如何实现下一个要求的理解:

    if (x != null)
       foo1();
    else
       foo2();

public void foo1(){
   print("X not null");
}

public void foo2(){
   print("X is null");
}
Run Code Online (Sandbox Code Playgroud)

谢谢

java optional

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