if-statement - OCaml - 如果然后其他
问题描述
我想在 if then else 中做几件事。我读了一个字符串,然后检查它的长度。如果是 3,则为 X,如果为 4,则为 Y。
我试过了:
let str = read_line ()
let first_approach () =
if String.lenght str = 3
then let char1 = String.get str 0
let char2 = String.get str 1
let char3 = String.get str 2
else ()
let second_approach () =
if String.lenght str = 3
then let char1 = String.get str 0
let char2 = String.get str 1
let char3 = String.get str 2
let char4 = String.get str 3
else ()
我想知道如何让里面的所有东西都能正常工作。因为我得到Syntax error。先感谢您。
解决方案
这段代码有很多问题。
在模块的最外层(例如,源文件或 REPL 输入),您可以使用let var = val
来定义全局变量。例如,在您的代码中,您使用此构造来定义str
。
但是,无论何时let
出现在其他任何地方(在声明或表达式中),它都用于定义局部变量,并且后面必须跟in
使用局部定义的表达式。由于您in
的定义中没有first_approach
and second_approach
,因此您的代码在语法上无效。
由于 和 内部的定义first_approach
是second_approach
本地的,调用后不会有任何效果。等等的定义char1
,即使在语法上更正,也不会是全局的。(正如@melpomene 所说,代码没有做任何事情。)
如果您有多个用分隔的表达式,您可以在or之后;
使用begin
/end
将它们分组为一个表达式。then
else
let f x =
if x > 5 then
begin
Printf.printf "x is quite large\n";
Printf.printf "adios\n"
end
如果字符串s
的长度为 3,则没有字符String.get s 3
。
# let s = "abc";;
val s : string = "abc"
# String.get s 3;;
Exception: Invalid_argument "index out of bounds".
推荐阅读
- facebook - Facebook Pixel - 第一方 Cookie 选项
- string - 什么模式或(循环和模式)可以在单词中找到所有可能的字符并保持在 LUA 中创建的序列
- c# - 在 C# .net MVC 中使用 ajax 下载文件
- node.js - 基于 docker-compose.yml 文件的节点环境变量的切换命令
- python - 如何在获得我想要的记录后停止 kafka python 消费者,并完成我的其余流程
- swift - 多个挤压多边形 Mapbox iOS
- python - itertools.accumulate 但试图用 str.join 替换 lambda
- python - 我无法完全卸载 numpy
- java - 由于嵌入式 Tomcat,Spring Boot bootJar 无法运行
- c# - 从文本或富文本字段中读取 unicode 字符