Ruby 带变量赋值的While循环
带变量赋值的while循环是如何工作的?这是我看到的一个例子Ruby 带变量赋值的While循环,ruby,loops,while-loop,tcpserver,Ruby,Loops,While Loop,Tcpserver,带变量赋值的while循环是如何工作的?这是我看到的一个例子 require "socket" server = TCPServer.new('localhost', 4567) loop do socket = server.accept headers = {} while line = socket.gets.split(' ', 2) # Here is the var assignment in loop break if line[0] ==
require "socket"
server = TCPServer.new('localhost', 4567)
loop do
socket = server.accept
headers = {}
while line = socket.gets.split(' ', 2) # Here is the var assignment in loop
break if line[0] == ""
headers[line[0].chop] = line[1].strip
end
data = socket.read(headers["Content-Length"].to_i)
end
除了5-10线,我什么都懂。只要一个关于如何执行的分步指南就非常有用。赋值表达式有值
line = socket.gets.split(' ', 2)
将右侧的值指定给左侧,然后将右侧的值作为赋值表达式的值返回
while line = socket.gets.split(' ', 2)
socket.gets.split(“”,2)
的值用作条件。但是,在本例中,该条件始终为真,因为它永远不会返回nil
或false
该代码启动侦听端口4567的TCP服务器,侦听传入的通信量,当任何通信量进入时,它会撕裂看似以字符串形式进入的头并将其映射到散列,然后,它根据特定头的值读取传入的文档
第5-10行细分:
headers = {}
这将在主循环的作用域中将头设置为空哈希(la hash.new),允许您将其设置为下一行开始的while内的值,然后在while退出后访问它
while line = socket.gets.split(' ', 2) # Here is the var assignment in loop
这将开始您的while循环。如果while条件的计算结果为true
,则执行该块。正如Yu提到的,赋值的右侧作为赋值表达式的值返回,这意味着对socket.get.split(“”,2)
的结果进行真实性评估。这将始终计算为true
。然后将操作结果设置为while
范围内的变量行
break if line[0] == ""
如果行
的第一个元素等于“”,我们将退出while
循环。这与写入中断if line.first.empty?
headers[line[0].chop] = line[1].strip
如果前一行的计算结果不是true,我们将继续在标题中设置键,无论行[0]的值是多少,都将其命名为哈希。chop
结果是行[1]中包含的值。strip
。“斩”和“剥”是字符串清理方法
如果行
被设置为['foo','bar']
,这将把{'foo'=>'bar'}
合并到标题中
end
这将结束while
循环
data = socket.read(headers["Content-Length"].to_i)
这将变量data
设置为socket.read(integer)
将返回的值。鉴于它是内容长度标题,我假设它将返回套接字读取的整个文档。非常感谢,这部分解决了我的困惑。我在我的问题中添加了更多要详细说明的内容。谢谢你的回答,希望它能帮助其他有同样问题的人(我现在有点过了这个问题,但无论如何+1是一个好答案)。出于好奇,你是怎么发现这个问题的?我问这个问题已经三年了,在搜索Ruby测试中定义变量的语法和最佳实践时偶然发现了这个问题,发现它实际上没有得到回答。我想这只会帮助其他人在未来跌跌撞撞地穿过它。好吧,谢谢你的回答!我希望你留在这里(或其他任何人):)