我正在学习Elixir,并想知道为什么它有两种类型的函数定义:
def,调用usingmyfunction(param1, param2)fn,调用usingmyfn.(param1, param2)只有第二种函数似乎是第一类函数,可以作为参数传递给其他函数.模块中定义的函数需要包装在一个fn.有一些语法糖似乎是otherfunction(myfunction(&1, &2))为了使这容易,但为什么它首先是必要的?我们为什么不能这样做otherfunction(myfunction))?是否只允许调用模块函数而不像Ruby那样括号?它似乎从Erlang继承了这个特性,它也具有模块功能和实用程序,所以它实际上来自Erlang VM如何在内部工作?
有两种类型的函数并从一种类型转换为另一种类型以便将它们传递给其他函数有什么好处?呼叫功能有两种不同的符号吗?
当我在 Jupyter 终端中时,我经常使用Ctrl-wbash 快捷方式来删除单词。不幸的是,当我执行此操作时,Firefox 和 Chromium 都会关闭我的浏览器选项卡。为了简化设置,浏览器不允许再禁用此键绑定(旧版本是可能的)。
Firefox 文档推荐使用 Saka Key 扩展来自定义键绑定,但我发现虽然此扩展允许添加新的键绑定,但它不会替换现有的键绑定,因此Crtl-w仍然会关闭选项卡。
我正在使用不同的异步HTTP服务器来查看它们如何处理多个同时连接.为了强制执行耗时的I/O操作,我使用pg_sleepPostgreSQL函数来模拟耗时的数据库查询.以下是我对Node.js所做的事情:
var http = require('http');
var pg = require('pg');
var conString = "postgres://al:al@localhost/al";
/* SQL query that takes a long time to complete */
var slowQuery = 'SELECT 42 as number, pg_sleep(0.300);';
var server = http.createServer(function(req, res) {
pg.connect(conString, function(err, client, done) {
client.query(slowQuery, [], function(err, result) {
done();
res.writeHead(200, {'content-type': 'text/plain'});
res.end("Result: " + result.rows[0].number);
});
});
})
console.log("Serve http://127.0.0.1:3001/")
server.listen(3001)
Run Code Online (Sandbox Code Playgroud)
所以这是一个非常简单的请求处理程序,它执行一个占用300毫秒的SQL查询并返回一个响应.当我尝试基准测试时,我得到以下结果:
$ ab -n 20 -c 10 http://127.0.0.1:3001/
Time taken for tests: 0.678 seconds
Complete requests: …Run Code Online (Sandbox Code Playgroud)