pmontrasio / rubynights-20170301

2 stars 2 forks source link

Generators #28

Closed cstrap closed 7 years ago

cstrap commented 7 years ago
>>> gen = (x for x in range(10))
>>> type(gen)
<class 'generator'>
>>>

Giusto per infierire sull'uso delle parentesi in python :-) Potrebbe essere inserita nella sezione WATs?

Anche i generators meriterebbero uno spazio, insieme alle corutine e async. Forse è il caso di limitare la comparazione al web, anche se le peculiarità dei linguaggi la trovo decisamente più interessante.

pmontrasio commented 7 years ago

Ho scritto qualcosa dei generatori nella sezione yield.

Quel WAT è una comprehension che diventa un generatore quando si cambiano le parentesi quadrate in tonde. E' corretto?

cstrap commented 7 years ago

Esatto, questo è un modo per creare i generatori via comprehension. Va ricordato che la comprehension può essere usata per liste, dict e set.

pmontrasio commented 7 years ago

A proposito di set, in Ruby sono nella standard library e non dentro il core del linguaggio. Faccio una nota con [master 3a99bc2]

http://ruby-doc.org/stdlib-2.4.0/libdoc/set/rdoc/Set.html

2.3.0 :001 > s = Set.new
NameError: uninitialized constant Set
    from (irb):1
    from /home/me/.rvm/rubies/ruby-2.3.0/bin/irb:11:in `<main>'
2.3.0 :002 > require 'set'
 => true 
2.3.0 :003 > s = Set.new
 => #<Set: {}> 
2.3.0 :004 > s << 1
 => #<Set: {1}> 
2.3.0 :005 > s << 2
 => #<Set: {1, 2}> 
2.3.0 :006 > s << 3
 => #<Set: {1, 2, 3}> 
2.3.0 :007 > s << 4
 => #<Set: {1, 2, 3, 4}> 
2.3.0 :008 > s.map {|n| n * n}
 => [1, 4, 9, 16] 
2.3.0 :009 > s.map {|n| n * n}.class
 => Array 
2.3.0 :010 > s.each {|n| puts n * n}
1
4
9
16
 => #<Set: {1, 2, 3, 4}>