Python, эквивалентный из продолжений с Ruby

Вы можете перебрать свой Object.entries и посмотреть на каждый ключ с помощью регулярного выражения, чтобы увидеть, начинается ли он с цифры. Если это так, добавьте его к соответствующему подобъекту:

let myObj = {'1-inputWidth' : '30px' , '1-inputHeight': '30px', '1-color' : 'red','2-inputWidth' : '20px' , '2-inputHeight': '10px', '2-color' : 'blue','3-inputWidth' : '60px' , '3-inputHeight': '70px', '3-color' : 'white',  '4-inputWidth' : '90px' , '4-inputHeight': '10px', '4-color' :'yellow', scroll : 'auto', 'z-index' : 1}

let o = Object.entries(myObj)
       .reduce((obj, [k, v]) => {
          let num = k.match(/^\d+/)              // get number in key?
          if (num) {                             // was there a match?
              if (obj[num]) obj[num][k] = v      // add new entry
              else obj[num] = {[k]: v}
          }
          return obj

       }, {})

console.log(o)

7
задан jfs 23 November 2008 в 20:08
поделиться

4 ответа

Статья, которую Вы заключили в кавычки, содержит ссылку на Продолжения, Сделанные Простой И Проиллюстрированный в разделе Resources, который говорит о продолжениях на языке Python.

5
ответ дан 6 December 2019 в 23:15
поделиться

смотрите на оператор урожая для создания генераторов.

Я не говорю рубина, но кажется на поиск этого:

def loop():
    for i in xrange(1,5):
        print i
        if i == 2:
            yield


for i in loop():
    print "pass"

Править: Я понимаю, что это - в основном специализация реальных продолжений, но это должно быть достаточно в большинстве целей. Использовать yield возвратить продолжение и .next() сообщение на генераторе (возвращенный, просто звоня loop()) повторно вступить.

2
ответ дан 6 December 2019 в 23:15
поделиться

Используя generator_tools (для установки:'$ easy_install generator_tools'):

from generator_tools import copy_generator

def _callg(generator, generator_copy=None):
    for _ in generator: # run to the end
        pass
    if generator_copy is not None:
        return lambda: _callg(copy_generator(generator_copy))

def loop(c):
    c.next() # advance to yield's expression
    return _callg(c, copy_generator(c))

if __name__ == '__main__':
    def loop_gen():
        i = 1
        while i <= 4:
            print i
            if i == 2:
                yield
            i += 1

    c = loop(loop_gen())
    print("c:", c)
    for _ in range(2):
        print("c():", c())

Вывод:

1
2
3
4
('c:', <function <lambda> at 0x00A9AC70>)
3
4
('c():', None)
3
4
('c():', None)
2
ответ дан 6 December 2019 в 23:15
поделиться
def loop():    
    def f(i, cont=[None]):        
        for i in range(i, 5):
            print i
            if i == 2:
                cont[0] = lambda i=i+1: f(i)
        return cont[0]
    return f(1)

if __name__ == '__main__':
    c = loop()
    c()
0
ответ дан 6 December 2019 в 23:15
поделиться