If you have a problem or need to report a bug please email : support@dsprobotics.com
There are 3 sections to this support area:
DOWNLOADS: access to product manuals, support files and drivers
HELP & INFORMATION: tutorials and example files for learning or finding pre-made modules for your projects
USER FORUMS: meet with other users and exchange ideas, you can also get help and assistance here
NEW REGISTRATIONS - please contact us if you wish to register on the forum
Users are reminded of the forum rules they sign up to which prohibits any activity that violates any laws including posting material covered by copyright
Any experts in Ruby Class out there?
2 posts
• Page 1 of 1
Any experts in Ruby Class out there?
Hello all, and thanks in advance for any help! I've been trying to set up a Ruby Class that can handle and use its own internal arrays. I'm quite a novice at Ruby classes, and the nearest I've got is this:
class Destination
attr_accessor :l
@@letters
def initialize(l)
@l=l
end
### # out if clauses on first run...
@@letters=[] if @@letters==nil
def name
@@letters.collect{|ch| ch[0]}.join
end
def addLet(l)
@@letters << l
end
def wipe
@@letters.clear
end
end
I need in the class an array, @@letters (I'll eventually need other ones too). Line 3 sets up a variable called @@letters. LIne 7 turns it into an empty array. The ... if @@letters==nil... is to keep already inserted members of the array, but without line 3 it throws up an "uninitialised class variable" error - I have to run the class with the if statement #'ed out first time. Once that's done it works!
With the class now running I can do things like
@ylist=Destination.new("") a new instance of a Destination
%w[W A S H I N G T O N].each{|l| @ylist.addLet(l)} ... each letter becomes a member of @@letters
@ylist.name produces 'WASHINGTON'
It needs to be individual letters because I want to set up and access other data related to each letter. I'm sure there must be a better way to handle this, but so far it's eluded me.
class Destination
attr_accessor :l
@@letters
def initialize(l)
@l=l
end
### # out if clauses on first run...
@@letters=[] if @@letters==nil
def name
@@letters.collect{|ch| ch[0]}.join
end
def addLet(l)
@@letters << l
end
def wipe
@@letters.clear
end
end
I need in the class an array, @@letters (I'll eventually need other ones too). Line 3 sets up a variable called @@letters. LIne 7 turns it into an empty array. The ... if @@letters==nil... is to keep already inserted members of the array, but without line 3 it throws up an "uninitialised class variable" error - I have to run the class with the if statement #'ed out first time. Once that's done it works!
With the class now running I can do things like
@ylist=Destination.new("") a new instance of a Destination
%w[W A S H I N G T O N].each{|l| @ylist.addLet(l)} ... each letter becomes a member of @@letters
@ylist.name produces 'WASHINGTON'
It needs to be individual letters because I want to set up and access other data related to each letter. I'm sure there must be a better way to handle this, but so far it's eluded me.
- TimC
- Posts: 7
- Joined: Sat Dec 24, 2022 12:24 pm
Re: Any experts in Ruby Class out there?
You're using a class variable, not a class instance variable. Class variables also need to be initialized when created.
A class variable is shared among all classes and subclasses, even its own class construction. Try doubling your code:
Here's a general rule of validity (copy and paste to a RubyEdit):
A class variable is shared among all classes and subclasses, even its own class construction. Try doubling your code:
- Code: Select all
@ylist=Destination.new("")
%w[W A S H I N G T O N].each{|l| @ylist.addLet(l)}
@ylist.name # 'WASHINGTON'
@ylist=Destination.new("")
%w[W A S H I N G T O N].each{|l| @ylist.addLet(l)}
@ylist.name # 'WASHINGTONWASHINGTON'
Here's a general rule of validity (copy and paste to a RubyEdit):
- Code: Select all
class Parent
@@shared_among_everything = "class "
@shared_among_parent = "parent"
def self.shared_among_everything
@@shared_among_everything
end
def self.shared_among_parent
@shared_among_parent
end
def initialize(name)
@specific_to_this_instance = name
end
def specific_to_this_instance
@specific_to_this_instance
end
end
class Child < Parent
end
show = []
show << Parent.class_variables
show << Parent.shared_among_everything
show << Parent.instance_variables
show << Parent.shared_among_parent
bob = Parent.new("Bob")
show << bob.instance_variables
show << bob.specific_to_this_instance
show << bob.shared_among_everything
show << bob.shared_among_parent
bobby = Child.new("Bobby")
show << bobby.instance_variables
show << bobby.specific_to_this_instance
show << bobby.shared_among_everything
show << bobby.shared_among_parent
watch "overview", show.flatten
"There lies the dog buried" (German saying translated literally)
- tulamide
- Posts: 2714
- Joined: Sat Jun 21, 2014 2:48 pm
- Location: Germany
2 posts
• Page 1 of 1
Who is online
Users browsing this forum: No registered users and 46 guests