Skip to content

Instantly share code, notes, and snippets.

@mlanett
Last active August 29, 2015 14:11
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 mlanett/1da62a8f7a7742d2a3d4 to your computer and use it in GitHub Desktop.
Save mlanett/1da62a8f7a7742d2a3d4 to your computer and use it in GitHub Desktop.
Class fields in Ruby
def assert condition
raise unless condition
end
#
# @@fields are class fields, shared by all instances and all subclasses.
# Class fields MUST be initialized.
# Class fields can be accessed by instance methods.
# Class fields can be accessed by singleton methods.
#
class ClassField
@@class_field = 1
def field
@@class_field
end
def field=(f)
@@class_field = f
end
def self.class_field
@@class_field
end
end
class DerivedClassField < ClassField
# inherits field, field=, and @@class_field
end
c1 = ClassField.new
c2 = ClassField.new
dc = DerivedClassField.new
c1.field = 2
assert c2.field == 2
assert dc.field == 2
assert ClassField.class_field == 2
assert DerivedClassField.class_field == 2
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment