提问人:normidar 提问时间:12/1/2022 最后编辑:Chrisnormidar 更新时间:12/7/2022 访问量:68
意外的字符串相等结果
Unexpected string equality results
问:
我有一些 OCaml 代码:
let (&>) : ('x -> 'y) -> ('y -> 'z) -> ('x -> 'z) =
fun g f x -> x |> g |> f
let soi x = string_of_int x
let sof x = string_of_float x
let fos x = float_of_string x
let ios x = int_of_string x
let clear_int = ios &> soi
let is_int_clear (x: string) =
let targ = clear_int x in
let _ = print_endline x in
let _ = print_endline targ in
x == targ
let ccc = is_int_clear "123"
let scc = if ccc then "succ" else "fail"
let () = print_endline scc
我认为应该等于但输出这个:"123"
"123"
123
123
fail
"123"
是不平等的."123"
为什么以及如何解决它?
答:
0赞
Chris
12/7/2022
#1
你的逻辑中的错误在于使用哪些测试来衡量身体平等。这是检查两个字符串是否驻留在内存中的同一位置。==
您希望使用哪些检验来检验结构相等性:两个值是否包含相同的信息。=
更改非常简单。
let is_int_clear (x: string) =
let targ = clear_int x in
let _ = print_endline x in
let _ = print_endline targ in
x = targ
评论
let soi x = string_of_int x
let soi = string_of_int