2010-07-11 4 views
0

J'essaie d'envelopper ma tête autour du multithread, donc je joue avec Fiber s dans Ruby. Cependant, quand j'essaie d'exécuter mon script, il me dit que j'ai un caractère de retour à la ligne inattendu après ma déclaration ternaire. Ai-je manqué quelque chose à propos de la syntaxe, ici?" n" inattendu dans Ruby Fiber

timer = Fiber.new do |power| 
    power = power.nil? ? 'on' | power 
    start = Time.now 
    loop do 
    if power == 'off' 
     now = Time.now 
     puts now - start 
    end 
    power = Fiber.yield 
    end 
end 

Répondre

1

puissance = power.nil? ? 'on' |

La syntaxe correcte pour cela est power = power.nil? ? 'on' : power, avec deux points au lieu d'un canal.

Cependant, vous pouvez simplement écrire ce power = 'on' if power.nil?, ce qui est un peu plus court et probablement plus lisible pour la plupart des gens.

également comme sidenote: est-il une raison paticular que vous utilisez 'on' et 'off' au lieu de true et false?

+0

Merci, cela a corrigé ça. Puis-je réécrire la ligne de cette façon? Je pensais que cela ne fonctionnait pas de cette façon dans Fibres parce que le premier appel à 'Fiber # resume' fournit l'argument à la première affectation de la variable de bloc. – Andy