假设我有一个Erlang函数,带有spec.
-spec foo(integer(), string()) ->
boolean().
foo(_Integer, _String) ->
true.
Run Code Online (Sandbox Code Playgroud)
我的梦想是自动从Emacs中的这些信息中生成edoc.生成的代码应如下所示:
%%--------------------------------------------------------------------
%% @doc
%% Your description goes here
%% @spec foo(_Integer::integer(), _String::string()) ->
%%% boolean()
%% @end
%%--------------------------------------------------------------------
-spec foo(integer(), string()) ->
boolean().
foo(_Integer, _String) ->
true.
Run Code Online (Sandbox Code Playgroud)
是否存在类似的功能?
Google Chrome扩展程序是一项不错的发明,但它们可能会与大量用户信息进行交互.
是否可以在安装之前浏览其清单和/或源代码?
我在StackOverflow上问这个的原因是我刚刚开发了我的第一个扩展.因为它正在操作您访问的网站的CSS样式,所以在安装之前它会提示:
"此扩展程序可以访问您在所有网站上的浏览历史记录和私人数据"
非常害怕...我可以想象很多用户只是因为这条消息而没有安装扩展程序.我很高兴向他们展示我的扩展程序正在做什么以及它的安全性......
某些远程服务器上有一个XML文件(http://foo/bar.xml):
<?xml version="1.0" encoding="UTF-8"?>
<foo>
bar
</foo>
Run Code Online (Sandbox Code Playgroud)
如何使用AppleScript获取值"bar"?
在 Jenkinsfile 中,如果我在 alias 下安装了Jenkins 共享库my-awesome-lib,我可以使用以下语法包含它:
@Library('my-awesome-lib')
import ...
Run Code Online (Sandbox Code Playgroud)
但是如何从Jenkins 脚本控制台引用库?
我在gen_server上写了一些eunit测试:
-module(st_db_tests).
-include_lib("eunit/include/eunit.hrl").
main_test_() ->
{foreach,
fun setup/0,
fun cleanup/1,
[
fun db_server_up/1
]}.
setup() ->
{ok,Pid} = st_db:start_link(), Pid.
cleanup(Pid) ->
gen_server:call(Pid, stop).
db_server_up(Pid) ->
?_assertMatch({[{<<"couchdb">>,<<"Welcome">>},{<<"version">>, _}]},
gen_server:call(Pid, test)).
Run Code Online (Sandbox Code Playgroud)
当我进行测试时,我有这个:
./rebar eunit suite=st_db_tests skip_deps=true
==> site_stater (eunit)
Compiled test/st_db_tests.erl
... loading stuff ...
=PROGRESS REPORT==== 27-Jun-2011::12:33:21 ===
supervisor: {local,kernel_safe_sup}
started: [{pid,<0.127.0>},
{name,inet_gethost_native_sup},
{mfargs,{inet_gethost_native,start_link,[]}},
{restart_type,temporary},
{shutdown,1000},
{child_type,worker}]
module 'st_db_tests'
*** context cleanup failed ***
::exit:{normal,{gen_server,call,[<0.99.0>,stop]}}
in function gen_server:call/2
=======================================================
Failed: 0. Skipped: 0. Passed: 1.
Run Code Online (Sandbox Code Playgroud)
好像测试已经过去了,但在上下文清理中有错误,这是不对的,对吧?)
我怎样才能解决这个问题?
PS:我的gen_server
-module(st_db).
-behaviour(gen_server). …Run Code Online (Sandbox Code Playgroud) 给定两个Erlang节点"foo @ host"和"bar @ host",以下内容在"foo"上产生打印输出:
(foo@host) rpc:call('bar@host', io, format, ["~p", [test]]).
Run Code Online (Sandbox Code Playgroud)
以下打印出"bar":
(foo@host) rpc:call('bar@host', erlang, display, [test]).
Run Code Online (Sandbox Code Playgroud)
即使erlang:display/1应该仅用于调试,两个函数都应该将内容发送到标准输出.每个进程都应该从其父进程继承组长,所以我希望这两个函数以一致的方式运行.
上述行为是否有任何理由?
您可能知道,现在可以使用简短形式跟踪Erlang函数:
dbg:tpl(Module, Function, x).
Run Code Online (Sandbox Code Playgroud)
而不是通常的:
dbg:tpl(Module, Function, dbg:fun2ms(fun(_) -> exception_trace() end)).
Run Code Online (Sandbox Code Playgroud)
我其实想知道是否有类似的简短形式return_trace().就像是:
dbg:tpl(Module, Function, r).
Run Code Online (Sandbox Code Playgroud)
代替:
dbg:tpl(Module, Function, dbg:fun2ms(fun(_) -> return_trace() end)).
Run Code Online (Sandbox Code Playgroud)
dbg模块中的源代码似乎不建议:
new_pattern_table() ->
PT = ets:new(dbg_tab, [ordered_set, public]),
ets:insert(PT,
{x,
term_to_binary([{'_',[],[{exception_trace}]}])}),
ets:insert(PT,
{exception_trace,
term_to_binary(x)}),
PT.
Run Code Online (Sandbox Code Playgroud)
但我可能错了.你知道吗?
是否有可能在Emacs中的PHP文件中识别未使用的变量?
使用其他语言,可以使用flymake等工具.我已经启用了Flymake,以示对我的PHP文件的语法错误的飞行,但它仍然是令人沮丧的是PHP逻辑错误,有时由于类似的情况:
<?php
$foo = whatever();
$bar = something($fo);
...
Run Code Online (Sandbox Code Playgroud)
请注意$ foo上的错字将导致开发人员的头痛和他过度使用咖啡.
更新:
在Pascal和Gabor的提示之后,我在php.ini中设置:
error_reporting = E_ALL | E_STRICT
Run Code Online (Sandbox Code Playgroud)
当我从命令行运行php时,我现在能够看到有关未定义变量的通知(带或不带-l选项):
> php -r '$foo = 3; echo $fo;'
PHP Notice: Undefined variable: fo in Command line code on line 1
> php -r '$foo = 3; echo $fo;' -l
PHP Notice: Undefined variable: fo in Command line code on line 1
Run Code Online (Sandbox Code Playgroud)
这就是我目前在.emacs中使用的内容.它完全没有解析错误,但我仍然无法匹配通知,但:(
;; FlyMake for Php(需要'flymake)
(defun flymake-php-init ()
"Use php to check the syntax …Run Code Online (Sandbox Code Playgroud) 在最近的Erlang R14中,inets的文件httpd.hrl已被移除:
src/httpd.hrl
Run Code Online (Sandbox Code Playgroud)
至:
src/http_server/httpd.hrl
Run Code Online (Sandbox Code Playgroud)
在二郎的Web框架,包括使用以下指令几个地方的文件:
-include_lib("inets/src/httpd.hrl").
Run Code Online (Sandbox Code Playgroud)
因为我喜欢Erlang Web用两个版本的Erlang(R13和R14)进行编译,所以理想情况下我需要的是:
-ifdef(OLD_ERTS_VERSION).
-include_lib("inets/src/httpd.hrl").
-else.
-include_lib("inets/src/http_server/httpd.hrl").
-endif.
Run Code Online (Sandbox Code Playgroud)
即使可以通过以下方式检索ERTS版本:
erlang:system_info(version).
Run Code Online (Sandbox Code Playgroud)
这在预处理时确实是不可能的.
如何处理这些情况?解析变换是唯一的方法吗?还有更好的选择吗?
在GNU Makefile中,您有一个项目列表:
OBJECTS = foo bar baz
Run Code Online (Sandbox Code Playgroud)
您想迭代这些项目,并且您对索引和每个项目的值都感兴趣(foo => 1,bar => 2,baz => 3).在Makefile中执行此操作的惯用方法是什么?
erlang ×5
emacs ×2
applescript ×1
debugging ×1
eunit ×1
flymake ×1
groovy ×1
jenkins ×1
makefile ×1
php ×1
preprocessor ×1
trace ×1
unit-testing ×1