在精神:
- 的C#隐藏的功能
- Java的隐藏功能
- ASP.NET的隐藏功能
- Python中的隐藏功能
- HTML的隐藏功能
- 和其他隐藏功能问题
什么是二郎神的隐藏功能,每一个Erlang的开发者需要知道的?
每一个答案隐藏功能,请。
在精神:
什么是二郎神的隐藏功能,每一个Erlang的开发者需要知道的?
每一个答案隐藏功能,请。
在外壳的魔法命令。 完整名单是人工的,但我最常用的的是:
遗产! http://www.erlang.se/euc/07/papers/1700Carlsson.pdf
亲
-module(parent).
-export([foo/0, bar/0]).
foo() ->
io:format("parent:foo/0 ~n", []).
bar() ->
io:format("parent:bar/0 ~n", []).
儿童
-module(child).
-extends(parent).
-export([foo/0]).
foo() ->
io:format("child:foo/0 ~n", []).
安慰
23> parent:foo().
parent:foo/0
ok
24> parent:bar().
parent:bar/0
ok
25> child:foo().
child:foo/0
ok
26> child:bar().
parent:bar/0
ok
参数化模块! 从http://www.lshift.net/blog/2008/05/18/late-binding-with-erlang和http://www.erlang.se/euc/07/papers/1700Carlsson.pdf
-module(myclass, [Instvar1, Instvar2]).
-export([getInstvar1/0, getInstvar2/0]).
getInstvar1() -> Instvar1.
getInstvar2() -> Instvar2.
和
Eshell V5.6 (abort with ^G)
1> Handle = myclass:new(123, 234).
{myclass,123,234}
2> Handle:getInstvar1().
123
3> Handle:getInstvar2().
234
user_default.erl - 你可以在你的路径编译user_default.beam它可以是非常漂亮的建立你自己的shell内建
beam_lib:块可以从使用调试编译束得到源代码,可以在其上真正有用
{ok,{_,[{abstract_code,{_,AC}}]}} = beam_lib:chunks(Beam,[abstract_code]).
io:fwrite("~s~n", [erl_prettypr:format(erl_syntax:form_list(AC))]).
端口,外部或链接中,接受一些所谓的IO-列出了发送数据给他们。 一个IO-list是二元或二进制文件或整数范围0..255(可能深)列表。
这意味着,而不是将它们发送到端口之前,连接两个列表,一个可以只把他们作为一个列表的两个项目。 因此,而不是
"foo" ++ "bar"
一个做
["foo", "bar"]
在这个例子中是微不足道的差异,当然。 但其本身的iolist允许方便的编程创建输出数据时。 io_lib:格式/ 2,3本身返回例如一个IO列表。
功能二郎:list_to_binary / 1接受IO名单,但现在我们有二郎:iolist_to_binary / 1传达的意图更好。 还有一个Erlang:iolist_size / 1。
最重要的是 ,因为文件和插座为港口实现的,您可以发送iolists给他们。 无需压平或追加。
那场比赛的规定可以使用ETS建:fun2ms(...)在使用和翻译二郎神乐趣语法到比赛规格用解析变换。
1> ets:fun2ms(fun({Foo, _, Bar}) when Foo > 0 -> {Foo, Bar} end).
[{{'$1','_','$2'},[{'>','$1',0}],[{{'$1','$2'}}]}]
因此,没有乐趣的值有史以来,表达获取与在编译时的比赛规格更换。 乐趣只能做的事情匹配表达式可以做的。
此外,ETS:fun2ms可在外壳的使用,这样很有趣表达式可以很容易地进行测试。
.erlang_hosts给出了一个很好的方式来分享跨机器名
不一定是“隐藏”,但我不经常看到这一点。 匿名函数可以有多个条款,就像模块功能,即
-module(foo).
-compile(export_all).
foo(0) -> "zero";
foo(1) -> "one";
foo(_) -> "many".
anon() ->
fun(0) ->
"zero";
(1) ->
"one";
(_) ->
"many"
end.
1> foo:foo(0).
"zero"
2> foo:foo(1).
"one"
3> foo:foo(2).
"many"
4> (foo:anon())(0).
"zero"
5> (foo:anon())(1).
"one"
6> (foo:anon())(2).
"many"
的gen___tcp和SSL套接字具有{分组,类型}套接字选项中进行解码的多个协议的帮助。 功能二郎:decode_packet / 3对他们做了什么不同的类型值可以是什么很好的说明。
连同{活性,一旦}或{活性,TRUE}设置,每个框值将被传递作为单个消息。
实施例:分组HTTP模式大量用于iserve和用于分组FCGI模式ifastcgi 。 我可以想像,很多其他HTTP服务器的使用HTTP数据包,以及。
.erlang可以预载在壳启动库和运行命令,也可以通过在节点名称做一个case语句做给特定节点的特定命令。
如果你想在一个列表理解来执行一个以上的表达式,你可以使用块。 例如:
> [begin erlang:display(N), N*10 end || N <- lists:seq(1,3)].
1
2
3
[10,20,30]
它可以定义自己的迭代器QLC使用。 例如,从一个SQL查询的结果集可以被制作成QLC表中,从而从QLC查询功能中获益。
此外Mnesia表,限定词和ETS有表/ 1,2函数返回这样的“查询处理”他们。
事实并非如此隐蔽,但其中最重要的一个方面,艇员选拔二郎作为开发平台的时候:
您可以通过启动它隐藏一个Erlang节点 :
erl -sname foo -hidden
您仍然可以连接到该节点,但它不会出现在返回的列表nodes/0
。
与追加操作符匹配:
"pajamas:" ++ Color = "pajamas:blue"
颜色现在有值“blue”。 要知道,这一招有它的局限性 - 因为据我所知,它只能与一个变量,在上面给出的顺序一个恒定的工作。
热代码加载。 从维基。
代码被加载和“模块”为单位来管理,该模块是一个编译单元。 该系统可以保持在存储器中的模块的两个版本在同一时间,和过程可以同时从每个运行代码。
该版本被称为“新”与“旧”的版本。 直到它使得其模块的外部调用进程将不会移动到新版本。