考虑一下:
user=> (let [i Integer/MAX_VALUE] (+ i i))
java.lang.ArithmeticException: integer overflow (NO_SOURCE_FILE:0)
user=> (def i Integer/MAX_VALUE)
#'user/i
user=> (+ i i)
4294967294
为什么let
精确提升不会发生并且我们得到溢出异常,但def
精确提升到Long
?它是一个错误吗?
考虑一下:
user=> (let [i Integer/MAX_VALUE] (+ i i))
java.lang.ArithmeticException: integer overflow (NO_SOURCE_FILE:0)
user=> (def i Integer/MAX_VALUE)
#'user/i
user=> (+ i i)
4294967294
为什么let
精确提升不会发生并且我们得到溢出异常,但def
精确提升到Long
?它是一个错误吗?