[每日一Errr~lang] hello world
2010-02-25 16:27:47| 分类:
lang_erlang
| 标签:
|举报
|字号大中小 订阅
万事都是从 hello world 开始,我们也不例外。
基本环境
erlang 命令行有三个常用工具:
erl, 整个 erl 虚拟机
erlc, erl source compiler
escript, 直接运行一个简单的脚本
对于大规模的程序,需要写成 erl 规范指定的 app,编译后,部署到 erl 上面跑。
而一般工具类的程序,则 escript 一下即可。
类型入门
erlang 中的 list 就是 [ ]
$ erl
1> Aaa = [aaa,bbb,ccc].
[aaa,bbb,ccc]
其中 Aaa(大写字母开头) 是一个 variable, 类型为 list。而 aaa, bbb(小写字母开头) 类型为 atom,相当于一种程序内使用的 symbol,比如返回值可以写:
foobar() ->
{ok, "Hello"}.
{ok, Ret} = foobar(),
... use Ret
而 { } 就是一个 tuple,和 python 的概念一样。
剩下的类型 int, float, string 没啥可介绍的,其他语言都一样。
模块入门
erlang 中每个文件就是一个模块,模块中的函数默认是外部不可见的。让外部可见,需要
-export([func_one/1, func_two/3]).
其中 /1, /3 表示这个函数有几个参数。
函数入门
erlang 中没有 C 用大括号 { } 括起来的 block 的概念,所以在语句的结束符上,有些特殊要求。最开始很难习惯这个。
一个函数最后,使用圆点 . 结束。而中间每条语句用逗号 , 结束,如:
foobar(hello, Var) ->
line one,
line two;
foobar(goodday, Var) ->
line three,
line four;
foobar(_, Var) ->
other.
为啥会有三个 foobar ??,erlang 中的函数是所谓 pattern match 的,可以在这一层上,就把一些逻辑分开:
foobar(hello, "abc").
foobar(goodday, "wawa").
foobar(whatisthis, "haha").
分别调用了执行了不同的3段内容。
下面用的 io:format 就是 C 的 printf,写法看起来不太一样而已。
HelloWorld示例
-------------------------------------------
% hello.erl
-export([main/1]).
main([YourName]) ->
io:format("hello world 1~n"),
io:format("hello ~s~n", [YourName]);
main([YourName, Age]) ->
io:format("hello world 2~n"),
io:format("hello ~s, age ~s~n", [YourName, Age]);
main(_) ->
usage().
usage() ->
io:format("usage: ~s name [age]~n", [filename:basename(escript:script_name())]),
halt(1).
-------------------------------------------
$ escript hello.erl
usage: hello.erl name [age]
$ escript hello.erl kasicass
hello world 1
hello kasicass
$ escript hello.erl kasicass 18
hello world 2
hello kasicass, age 18
-------------------------------------------
对应的 C 程序
-------------------------------------------
#include <stdio.h>
void usage(const char *program)
{
printf("usage: %s name <age>\n", program);
}
int main(int argc, char *argv[])
{
if ( argc == 2 )
{
printf("hello world 1\n");
printf("hello %s\n", argv[1]);
}
else if ( argc == 3 )
{
printf("hello world 2\n");
printf("hello %s, age %s\n", argv[1], argv[2]);
}
else
{
usage(argv[0]);
}
return 0;
}
-------------------------------------------
$ gcc hello.c
$ ./a.out
usage: ./a.out name <age>
$ ./a.out kasicass
hello world 1
hello kasicass
$ ./a.out kasicass 18
hello world 2
hello kasicass, age 18
-------------------------------------------
评论这张
转发至微博
转发至微博
评论