我正在研究球拍中的函数式编程,一个问题测试说:
在Java中,我们可以使用x += 10;
我们可以在拍子(+= var amount)
中定义具有与Java相同含义的函数吗?
我不确定,但我认为不可以,因为我无法使用球拍中的函数修改变量。
赞:
(define myvar 10)
(+= myvar 1)
myvar
当我在drracket控制台中输入myvar
时,我将继续获得10分
答案 0 :(得分:3)
在大多数Algol语言中,x += 5
基本上是x = x + 5
的缩写。在Java中,我确定您无法满足您的要求。例如。
public static void method plusEqual(int binding, int increment) {
binding = binding + increment;
}
但是在Scheme和Racket中,您可以。由于完整格式为(set! binding (+ binding argument))
,因此我建议使用+set!
(define-syntax +set!
(syntax-rules ()
((_ binding increment)
(set! binding (+ binding increment)))))
(define test 10)
(+set! test 5)
test ; ==> 15
答案 1 :(得分:1)
您无法定义执行此操作的功能。
您可以定义一个宏,但是该宏可以扩展为(set! var (+ var amount))
,就可以了!