加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

scala – 将一个函数中的一个有条件地应用于一个参数

发布时间:2020-12-16 18:05:05 所属栏目:安全 来源:网络整理
导读:我有两个带有一个参数的函数,一个String.我根据某些条件申请其中一个或另一个.这就是我的尝试: def foo(s: String) = { ... }def bar(s: String) = { ... }(if (condition) foo else bar)("baz") 但我收到这样的错误: console:10: error: missing argument
我有两个带有一个参数的函数,一个String.我根据某些条件申请其中一个或另一个.这就是我的尝试:

def foo(s: String) = { ... }
def bar(s: String) = { ... }
(if (condition) foo else bar)("baz")

但我收到这样的错误:

<console>:10: error: missing arguments for method foo;
follow this method with `_' if you want to treat it as a partially applied function
              (if (true) foo else bar)("baz")
                         ^

我试着写foo_但当然我得到了错误:找不到:值foo_.在Scala中表达这个成语的正确方法是什么?

解决方法

方法名称和下划线之间需要一个空格.这很好用:

def foo(s: String) = s + "-FOO"
def bar(s: String) = s + "-BAR"
val condition = true
(if (condition) foo _ else bar _)("baz")
// res0: String = baz-FOO

方法名称后面的下划线告诉Scala您希望将该方法作为更高级别的函数传递.根据我的理解,这是一种消除模式是否要将方法作为函数传递或传递没有参数的方法的结果的方法.例如:

def f = 1
val x = Some(f)

x的类型应该是什么?会是某些[Int]还是某些[()=> Int]?它应该默认为前者,但如果你想要后者,你可以使用下划线表示法:

val y = Some(f _)

你必须处理所有这些下划线的废话,因为Scala methods aren’t functions.如果你将foo和bar声明为函数而不是方法,那么你的原始代码按原样运行:

val foo = (s: String) => s + "-FOO"
val bar = (s: String) => s + "-BAR"
val condition = false
(if (condition) foo else bar)("baz")
// res1: String = baz-BAR

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读