一个更有趣的例子是HTTP服务器:
require "http/server"
server = HTTP::Server.new do |context|
context.response.content_type = "text/plain"
context.response.print "Hello world! The time is #{Time.local}"
end
address = server.bind_tcp 8080
puts "Listening on http://#{address}"
server.listen
在读完整页教程后我们就能理解上述的代码了,但是现在可以从中发现一些事情。
-
你可以通过 引入(Require) 来引入其他文件里的代码:
require "http/server"
-
你可以定义 局部变量(local variables) 且无需指定其具体类型:
server = HTTP::Server.new ...
-
你可以通过调用对象HTTP::Server上的bind_tcp方法设置HTTP服务器的端口(端口设置为8080)
address = server.bind_tcp 8080
-
你可以调用对象的 方法(methods) (或发送消息) :
HTTP::Server.new ... ... Time.local ... address = server.bind_tcp 8080 ... puts "Listening on http://#{address}" ... server.listen
-
你可以使用 代码块(blocks), 这是复用代码的好方法,同时也可以用来模仿函数程序设计的特性:
HTTP::Server.new do |context| ... end
-
你可以轻松创建带有嵌入内容的字符串,称为字符串插值。Crystal还可以通过其他 语法(syntax) 来创建数组,哈希,range, 元组等数据类型:
"Hello world! The time is #{Time.local}"