Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
编写变量Scala谓词方法_Scala_Variadic - Fatal编程技术网

编写变量Scala谓词方法

编写变量Scala谓词方法,scala,variadic,Scala,Variadic,我有以下例子: val check30 = allTrue(x:Int => x%2 == 0, x:Int => x%3 == 0, x:Int => x%5== 0) val check30(60) //evaluates to true 我想编写一个谓词方法allTrue,它接受几个谓词,如示例中所示,并通过foldRight组合它们 我试过这样的方法: def allTrue[T](pred: T =>Boolean*): Boolean = pred

我有以下例子:

val check30 = allTrue(x:Int => x%2 == 0, x:Int => x%3 == 0, x:Int => x%5== 0)
val check30(60) //evaluates to true 
我想编写一个谓词方法
allTrue
,它接受几个谓词,如示例中所示,并通过
foldRight
组合它们

我试过这样的方法:

def allTrue[T](pred: T =>Boolean*): Boolean =
    pred.foldRight(true)(_ && _)
然而,这不起作用


如何正确执行此操作?

您的问题是您没有通过要测试的值。你可以做:

def allTrue[T](pred: T => Boolean*)(value: T): Boolean =
  pred.forall(p => p(value))
def allTrue[T](pred: T => Boolean*)(value: T): Boolean =
  pred.foldRight(true)((p, b) => b && p(value))
然后使用它:

val check30 = allTrue[Int](_ % 2 == 0, _ % 3 == 0, _ % 5 == 0)(_)
val result = check30(60) //evaluates to true
println(result)
使用
foldRight
可以执行以下操作:

def allTrue[T](pred: T => Boolean*)(value: T): Boolean =
  pred.forall(p => p(value))
def allTrue[T](pred: T => Boolean*)(value: T): Boolean =
  pred.foldRight(true)((p, b) => b && p(value))

代码在运行。

您的问题是您没有通过要测试的值。你可以做:

def allTrue[T](pred: T => Boolean*)(value: T): Boolean =
  pred.forall(p => p(value))
def allTrue[T](pred: T => Boolean*)(value: T): Boolean =
  pred.foldRight(true)((p, b) => b && p(value))
然后使用它:

val check30 = allTrue[Int](_ % 2 == 0, _ % 3 == 0, _ % 5 == 0)(_)
val result = check30(60) //evaluates to true
println(result)
使用
foldRight
可以执行以下操作:

def allTrue[T](pred: T => Boolean*)(value: T): Boolean =
  pred.forall(p => p(value))
def allTrue[T](pred: T => Boolean*)(value: T): Boolean =
  pred.foldRight(true)((p, b) => b && p(value))

代码运行于。

谢谢您的回答。非常有帮助!但是我想用foldRight来做…@gython为什么要用
foldRight
forall
在第一个错误条件下停止,这将提高性能。您完全正确!不过,我想练习一下
foldRight
foldLeft
的用法。谢谢你的回答。非常有帮助!但是我想用foldRight来做…@gython为什么要用
foldRight
forall
在第一个错误条件下停止,这将提高性能。您完全正确!然而,我想练习
foldRight
foldLeft
的用法。