OpenStruct creates small objects whose attributes can be assigned by name.

open struct `OpenStruct` is useful for small data records when a full class would be more ceremony than the example needs.

OpenStruct Basics

name
ostruct_basics.rb
Replay: real traced execution (multi-file project)
require "ostruct"

name = "Ada"
profile = OpenStruct.new

profile.name = name
profile.language = "Ruby"
profile.lessons = 3

summary = "#{profile.name} studies #{profile.language}"

puts "name=#{profile.name}"
puts "lessons=#{profile.lessons}"
puts "summary=#{summary}"
require "ostruct"

name = "Matz"
profile = OpenStruct.new

profile.name = name
profile.language = "Ruby"
profile.lessons = 3

summary = "#{profile.name} studies #{profile.language}"

puts "name=#{profile.name}"
puts "lessons=#{profile.lessons}"
puts "summary=#{summary}"
require "ostruct"

name = "Grace"
profile = OpenStruct.new

profile.name = name
profile.language = "Ruby"
profile.lessons = 3

summary = "#{profile.name} studies #{profile.language}"

puts "name=#{profile.name}"
puts "lessons=#{profile.lessons}"
puts "summary=#{summary}"
  1. name ← Ada, profile ← #<OpenStruct>, profile.name ← Ada, profile.language ← Ruby

    1require "ostruct"23name→ Ada = "Ada"  #@name="Matz", "Grace"4profile→ #<OpenStruct> = OpenStruct.new56profile.name→ Ada = nameAda7profile.language→ Ruby = "Ruby"8profile.lessons→ 3 = 3910summary→ Ada studies Ruby = "#{profile.nameAda} studies #{profile.languageRuby}"1112puts "name=#{profile.nameAda}"13puts "lessons=#{profile.lessons3}"14puts "summary=#{summaryAda studies Ruby}"
    outputname=Ada
    lessons=3
    summary=Ada studies Ruby
  1. name ← Matz, profile ← #<OpenStruct>, profile.name ← Matz, profile.language ← Ruby

    1require "ostruct"23name→ Matz = "Matz"4profile→ #<OpenStruct> = OpenStruct.new56profile.name→ Matz = nameMatz7profile.language→ Ruby = "Ruby"8profile.lessons→ 3 = 3910summary→ Matz studies Ruby = "#{profile.nameMatz} studies #{profile.languageRuby}"1112puts "name=#{profile.nameMatz}"13puts "lessons=#{profile.lessons3}"14puts "summary=#{summaryMatz studies Ruby}"
    outputname=Matz
    lessons=3
    summary=Matz studies Ruby
  1. name ← Grace, profile ← #<OpenStruct>, profile.name ← Grace, profile.language ← Ruby

    1require "ostruct"23name→ Grace = "Grace"4profile→ #<OpenStruct> = OpenStruct.new56profile.name→ Grace = nameGrace7profile.language→ Ruby = "Ruby"8profile.lessons→ 3 = 3910summary→ Grace studies Ruby = "#{profile.nameGrace} studies #{profile.languageRuby}"1112puts "name=#{profile.nameGrace}"13puts "lessons=#{profile.lessons3}"14puts "summary=#{summaryGrace studies Ruby}"
    outputname=Grace
    lessons=3
    summary=Grace studies Ruby