2014-05-22 169 views
-1
let minus = function 
    | Int.min_value, _ | Int.max_value, _ | _, Int.min_value | _, Int.max_value -> 0 
    | x, y -> x - y 

Error: Parse error: [module_longident] expected after "." (in [module_longident])這個功能有什麼問題?

我看不出有什麼問題。

Core.Std這樣做在utop打開

回答

1

Int.min_valueInt.max_value的值,而不是構造函數(構造函數的名稱是大寫,價值觀的名字都沒有)。

您不能在模式匹配中使用值,您只能使用構造函數。

好代碼

let minus (x, y) = 
    if x = Int.min_value 
    || x = Int.max_value 
    || y = Int.min_value 
    || y = Int.max_value 
    then 
    0 
    else 
    x - y 

你的錯誤的代碼就相當於

let min_value = -1000000 
let max_value = 1000000 

let minus = function 
| min_value, _ | max_value, _ | _, min_value | _, max_value -> 0 
| x, y -> x - y 

來編譯,因爲它使用正確的名稱(從不同的模塊沒有名字),但會產生錯誤的結果(總0)。