E4141

E4141#

此应用形式对于该参数无效,因为它未声明为可选。

当您尝试将可选值转发给函数的参数时,会发生此错误。只有当参数被声明为可选参数时才允许这样做。即使将参数声明为带有默认值的标记参数,也不允许将可选值转发给它。

错误示例#

fn f(opt~ : Int = 4) -> Unit {
  println("opt: \{opt}")
}

fn main {
  let opt = Some(42)
  f(opt?) // Error: This form of application is invalid for argument opt~, because it is not declared with opt? : _.
}

建议#

如果您有权控制要调用的函数,您可以将参数更改为可选参数。

fn f(opt? : Int) -> Unit {
  let opt = match opt {
    Some(opt) => opt
    None => 4
  }
  println("opt: \{opt}")
}

但是,如果您没有控制权,您可以在将其传递给函数之前解包可选值。

fn main {
  let opt = Some(42)
  let opt = match opt {
    Some(opt) => opt
    None => 4
  }
  f(opt~)
}