在我的情况下,我想要一个标志来控制函数应使用哪个运算符,我计划了以下内容:

val includeValue = *some value*

val include = _ => _
val exclude = _ > _

val operation = if (includeValue) include else exclude

这可能吗???

#1楼 票数:3

如果要为所有可转换为Comparable类型定义操作,则可以使用Comparable

def exclude[T <% Ordered[T]](a: T, b: T) = a > b
def include[T <% Ordered[T]](a: T, b: T) = a >= b
def operation[T <% Ordered[T]](a: T, b: T) = if (includeValue) include(a, b) else exclude(a, b)

#2楼 票数:2 已采纳

简而言之,您不能以任何合理的方式使用泛型将_ > _存储在val中。

_ > _表示一个接受两个参数的函数。 它在第一个参数上调用>方法,并将第二个作为参数传递给它。 我们不能在这里简单地使用通配符类型,因为不是每个类型都有一个>方法。 这样具有从未知到未知的功能也没有意义。

我们可以尝试一些简单的事情,例如将它们设置为Int => Int

val includeValue = false
val include: (Int, Int) => Boolean = _ >= _
val exclude: (Int, Int) => Boolean = _ > _
val operation = if (includeValue) include else exclude

scala> operation(2, 2)
res72: Boolean = false

// with includeValue = true
scala> operation(2, 2)
res73: Boolean = true

但是您只能通过此实现来使用Int 也许这对你来说还可以。 如果不是,那么您可能要使用Numeric特征,但是使用此符号会变得很混乱。

  ask by pmkrefeld translate from so

未解决问题?本站智能推荐:

3回复

def或val用于在Scala中定义Function

我正在学习我大学的编程范例,并阅读讲师提供的这门课程材料: 但是从我自己的研究中我发现并习惯于定义相同的函数: 我是Scala的新手。 这两个定义都给出了以下结果: 在传递4作为参数。 现在我的主要问题是为什么讲师更愿意使用val来定义一个函数? 我认为它更长,并不
2回复

使用val的Scala中的函数文字

在以下代码中: double和evenFunc是函数变量,我们已经为它们分配了函数文字。但是如输出所示,当我们调用double时,还会执行println语句。但是evenFunc不会执行println语句,除非已定义。 incr是用关键字def定义的,因此其行为符合预期。 即使d
2回复

scala函数文字中的`=>`

在下面的函数文字中,second =>是什么意思?
1回复

scala编译中的原因(self:Runnable =>)?

当我在scala中检查Future的源代码时,我无法理解为什么self:Runnable => above compiles。 我知道symbol =>可以在方法参数中用作名字调用,也可以用来定义函数。 上面的代码似乎定义了一个函数,但它让我很困惑。
1回复

Scala中的println _:为什么type()=> Unit而不是(Any)=> Unit?

例如,我想将函数println赋值给变量k 我希望k的类型是(Any) => Unit但它的实际类型是() => Unit 。 当我用argumnent调用k时,它有一个错误: 但是,使用该参数调用printlin效果很好: 有没有人有关于将函数对象prin
1回复

scal中的val和def [重复]

这个问题已经在这里有了答案: 定义函数的“ def”和“ val”有什么区别 8回答 在Scala中,当我们喜欢时: 我的理解是,这里我们定义了一个函数文字。 Scala编译器会将其编译为扩展特性Function1的类,并在运行时对其进行实例化并将函数值分
4回复

如何在Scala中调用hashmap中的函数

我对scala很新,基本上我想在hashmap中将一些函数耦合到一个字符串。 但是我在subscriber.get(e.key)(e.EventArgs)中收到错误; 声明Option [EventArgs => Unit]不接受参数...示例代码:
5回复

如何在scala中返回一个函数

如何在Scala中返回一个 函数 副作用词法闭包 1 ? 例如,我在Go中查看此代码示例 : 打印1 2 3 5 8 我无法弄清楚如何在Scala中编写相同的内容。 1.在Apocalisp评论后更正