这几乎适用于任何语言,但因为我正在学习scala而且我的编程是scala ...
我正在学习函数式编程并且有一个等式,我需要经过一系列数字并在正负数前后交替。我一直在使用程序类型函数来做,但是想知道是否有人能想出更好的方法吗?
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;
}
答案 0 :(得分: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