为什么这些明显相同的字符串不相等

时间:2019-05-06 16:48:44

标签: ocaml equality string-comparison

我正在尝试以下代码:

open Str
let ss = (Str.first_chars "testing" 3);;
print_endline ("The first 3 chars of 'testing' are: "^ss);;
if (ss == "tes") 
  then print_endline "These are equal to 'tes'" 
  else print_endline "These are NOT equal to 'tes'"

但是,我得到的这些不相等:

$ ocaml str.cma testing2.ml

The first 3 chars of 'testing' are: tes
These are NOT equal to 'tes'

为什么Str.first_chars从“测试”中提取的前3个字符不等于“ tes”?

此外,我必须使用;;来使此代码起作用(我尝试的in;的组合无效)。将这三个语句组合在一起的最佳方法是什么?

1 个答案:

答案 0 :(得分:3)

(==)函数是物理相等运算符。如果要测试两个对象是否具有相同的内容,则应使用具有一个等号(=)的结构相等运算符。

  

将这三个语句组合在一起的最佳方法是什么?

OCaml中没有声明。仅表达式,所有返回值。它就像一个数学公式,其中有数字,运算符和函数,并将它们组合在一起成为更大的公式,例如 generate_wordcloud(words, mask) 。最接近该语句的是具有副作用并返回类型为unit的值的表达式。但这仍然是表达。

这里是一个示例,说明如何构建表达式,该表达式将首先将返回的子字符串绑定到sin (2 * pi)变量,然后按顺序计算两个表达式:无条件打印和有条件打印。总而言之,这将是一个评估单位值的表达式。

ss

这是它的工作方式

open Str

let () = 
  let ss = Str.first_chars "testing" 3 in
  print_endline ("The first 3 chars of 'testing' are: " ^ ss);
  if ss = "tes" 
  then print_endline "These are equal to 'tes'" 
  else print_endline "These are NOT equal to 'tes'"