Skip to content

Instantly share code, notes, and snippets.

@ryosuke-endo
Created October 11, 2016 11:00
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save ryosuke-endo/e62e1dfc50fd65ed77a4241b37105a18 to your computer and use it in GitHub Desktop.
Save ryosuke-endo/e62e1dfc50fd65ed77a4241b37105a18 to your computer and use it in GitHub Desktop.
class Family
def self.build
yield
end
end
x = Family.build do |family|
family.new_child('john') do |child|
child.hobby = 'game'
child.age = 18
end
family.new_child('yamada') do |child|
child.hobby = 'study'
child.age = 12
end
end
x.children
@jiikko
Copy link

jiikko commented Oct 11, 2016

class Family
  class Child
    attr_writer :age, :hobby

    def initialize(name)
      @name = name
    end
  end

  attr_reader :children

  def initialize
    @children = []
  end

  def self.build
    family = self.new
    yield(family)
    family
  end

  def new_child(name)
    child = Child.new(name)
    @children << child
    yield(child)
  end
end

@ryosuke-endo
Copy link
Author

class Family
def self.build
yield
end
end

def new_child(name)
yield
end

x = Family.build do |family|
family.new_child('john') do |child|
child.hobby = 'game'
child.age = 18
end

family.new_child('yamada') do |child|
child.hobby = 'study'
child.age = 12
end
end

x.children

@ai-kadota
Copy link

#全然わからなかった…
class Family
  def self.build
    yield
  end

  def new_child name
    @name = name
    yield
  end
end

x = Family.build do |family|
  family.new_child('john') do |child|
    child.hobby = 'game'
    child.age = 18
  end

  family.new_child('yamada') do |child|
    child.hobby = 'study'
    child.age = 12
  end
end

x.children

@jiikko
Copy link

jiikko commented Oct 11, 2016

family = Family.new
child = family.new_child('john')
child.hobby = 'game'
child.age = 18
child = family.new_child('yamada')
child.hobby = 'study'
child.age = 12
family.chilren

@1stMinos
Copy link

$ ruby hoge.rb
hoge.rb:9:in block in <main>': undefined methodnew_child' for nil:NilClass (NoMethodError)
from hoge.rb:3:in build' from hoge.rb:7:in

'
minoshimashinichi-no-MacBook-Air:sr

1 class Family
2 def self.build
3 yield
4 end
5 end
6
7 # nil class?!
8 x = Family.build do |family|
9
10 family.new_child('john') do |child|
11 child.hobby = 'game'
12 child.age = 18
13 end
14
15 family.new_child('yamada') do |child|
16 child.hobby = 'study'
17 child.age = 12
18 end
19
20 end
21
22 x.children

@ryosuke-endo
Copy link
Author

class Family
  @@children = []
  def new_child(name)
    @@children << Child.new(name)
  end

  def children
    @@children
  end
end

class Child
  attr_writer :hobby, :age

  def initialize(name)
    @name = name
  end
end

family = Family.new
child = family.new_child('john')
child.hobby = 'game'
child.age = 18
family.new_child('yamada')
child.hobby = 'study'
child.age = 12
family.children

@ai-kadota
Copy link

ai-kadota commented Oct 11, 2016

class Family
  attr_reader :children

  class Child
    attr_writer :name, :age, :hobby
  end

  def initialize
    @children = []
  end

  def new_child(name)
    child = Child.new
    child.name = name
    @children << child
    child
  end
end

@1stMinos
Copy link

途中で挫折 

class Family
class Child
attr_writer :age, :hobby
end

attr_reader :children

def initialize
@childreb = []
end

end

family = Family.new
child = family.new_child('john')
child.hobby = 'game'
child.age = 18
family.new_child('yamada')
child.hobby = 'study'
child.age = 12
x.chilren

@ryosuke-endo
Copy link
Author

ryosuke-endo commented Oct 11, 2016

修正

class Family
  attr_reader :children

  def initialize
    @children = []
  end

  def new_child(name)
    child = Child.new(name)
    @children << Child.new(name)
    child
  end
end

class Child
  attr_writer :hobby, :age

  def initialize(name)
    @name = name
  end
end

@ryosuke-endo
Copy link
Author

やり直した

class Family
  attr_reader :children

  class << self
    def build
      family = self.new
      yield(family)
      family
    end
  end

  def initialize
    @children = []
  end

  def new_child(name)
    child = Child.new
    yield(child)
    @children << child
  end
end

class Child
  attr_writer :hobby, :age
end

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment