opsommen Ruby variabele in één regel code

Dit is misschien een beetje vreemd, maar vraag me af of het mogelijk is om het volgende te bereiken in een single regel met Ruby-code.

bar = 15
foo = 5
10.times { foo = foo + 1 }
puts foo == bar

d.w.z. ik wil een actie een aantal keer uitvoeren op een vooraf gedefinieerde variabele en deze dan vergelijken met een andere variabele, waarbij een boolean wordt geretourneerd op basis van of ze gelijk zijn, maar in een enkele regel code?

1
Sorry, voorbeeldcode was onzin! Bedankt voor het feit dat ik dat heb gezegd, nu opgelost, hoop ik.
toegevoegd de auteur Paul Groves, de bron
snaren, heel goed punt over de puntkomma's - bedankt
toegevoegd de auteur Paul Groves, de bron
U verandert answer_should_be niet, is het niet? En dan controleer je of het is veranderd of niet. Er is iets vreemds aan de hand.
toegevoegd de auteur KL-7, de bron
In je echte code heb je dat nodig voor Fixnum s zoals in het voorbeeld of voor sommige veranderlijke objecten zoals strings of arrays? Btw, je één regel is een vrij gevaarlijke beperking: je kunt je voorbeeld schrijven in een enkele regel die statements scheidt met puntkomma's =)
toegevoegd de auteur KL-7, de bron

2 antwoord

Misschien helpt Enumerable # reduced .

puts (0..9).reduce(5) { |acc, _| acc + 1 } == 15

Het aantal iteraties wordt doorgegeven als het object waarvan verminderen wordt aangeroepen. De beginwaarde wordt doorgegeven als argument verminderen . De actie wordt uitgevoerd in het blok en het resultaat van elke uitvoering wordt uitgevoerd door iteraties als het eerste argument van het blok.

Het enige wat ontbreekt zijn toewijzingen aan variabelen. Laten we het doen.

puts (foo = (0..9).reduce(5) { |acc, _| acc + 1 }) == bar = 15

Dus ja, het is mogelijk, maar ik zou een uitgebreide, multiline en leesbare oplossing aanbevelen.

3
toegevoegd
Briljant, bedankt hiervoor, en ja, ik waardeer dat leesbaar het beste is, zal proberen en mooi opnieuw factureren, wilde gewoon kijken of het mogelijk was :)
toegevoegd de auteur Paul Groves, de bron
Alternatieve manier :) Array.new (10, 1) .inject (5) {| sum, el | sum + el} == 15
toegevoegd de auteur Aliaksei Kliuchnikau, de bron
 puts((foo, bar = 5, 15; 10.times { foo += 1 }; foo) == bar)
1
toegevoegd