1

这几乎适用于任何语言,但是因为我正在学习 scala 并且我的 prog 是在 scala 中...

我正在学习函数式编程并且有一个等式,我需要通过一系列数字并在正负foreach num之间交替。我一直在使用过程类型函数来做到这一点,但想知道是否有人能想到更好的方法?

var s = 1;

def sign : Double =
{       
    if(s == 1)
        s = -1;
    else if(s == -1)
        s = 1;

    return s;
}

谢谢

附录:

我已经改为这个,因为它更简洁:

var s = -1;

def sign : Int =
{       
    s *= -1;
    return s;
}
4

1 回答 1

3

你正在返回一个你也在改变的值,乍一看这看起来不是一个好主意。我会在这里寻求纯粹的功能,以避免愚蠢的错误等。

现在,我不太确定你想在这里做什么。你只是想翻转标志吗?如果是这样,该方法将是......微不足道的:

scala> def flipSign(d : Double) = -d
flipSign: (d: Double)Double

scala> flipSign(3)
res3: Double = -3.0

scala> flipSign(-11)
res4: Double = 11.0

如果您要确定符号(-1 表示负数,1 表示正数,0 表示,嗯,零),那么:

scala> def sign(d : Double) = {
     |     d match {
     |     case x if x > 0 => 1
     |     case x if x < 0 => -1
     |     case _ => 0
     |     }
     | }
sign: (d: Double)Int

scala> sign(-3)
res0: Int = -1

scala> sign(212)
res1: Int = 1

scala> sign(0)
res2: Int = 0

[编辑]

正如@senia 在评论中注意到的那样,sign也可以有一个非常简单的实现:

def sign(d : Double) = d compareTo 0
于 2013-07-30T09:26:29.940 回答