2015-09-01 3 views
-1

Как работает цикл 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] == "" 
     headers[line[0].chop] = line[1].strip 
    end 
    data = socket.read(headers["Content-Length"].to_i) 
end 

Я понимаю все, кроме линии 5-10 стрейч. Просто пошаговое руководство по тому, как оно выполняется, было бы чрезвычайно полезно.

ответ

2

Условное выражение назначения имеет значения.

line = socket.gets.split(' ', 2) 

Значение правой стороны назначается левой стороне, а затем значение с правой стороны возвращается как значение выражения присваивания.

while line = socket.gets.split(' ', 2) 

В качестве условия используется значение socket.gets.split(' ', 2). Однако в этом примере условие всегда верно, потому что String#split никогда не вернется nil или false.

+0

Большое спасибо, это решает часть моего замешательства. Я добавил немного к моему вопросу, чтобы уточнить. – thesecretmaster

Смежные вопросы