2016-10-31 3 views
-1

Ich möchte einen Code erstellen, um organische Chemistry-Verbindungen zu benennen. Wie kann ich die Argumente (num, bond) als Schlüssel für den Hash verwenden? Ignoriere, was ich mit globalen Variablen gemacht habe, es ist nur eine ungefähre Vorstellung davon, was ich vorhabe.Verwenden Sie Argument Ruby als Hash-Schlüssel

class Molecule 
def molecule_name(num, bond) 
    @num = { 1 => 'met', 2 => 'et', 3=> 'prop', 4 => 'but'} 
    @bond = {1 => 'ano', 2 => 'eno', 3 => 'ino'} 
end 
a = Molecule.new; a = a.molecule_name(2,1) 
print a 
end 
+0

Noch ist Ihre Absicht sehr unklar. Was genau versuchst du hier zu machen? Was ist die erwartete Ausgabe? –

+0

Meinst du nur mit '[]' z. '@num [num]' usw.? – mikej

+0

Unklar, was du verlangst. Was erwarten Sie, dass 'a.molecule_name (2,1)' zurückkommt? Etwas wie "[et", "ano"] '? –

Antwort

1

Die Frage ist ein wenig unklar, aber ich denke, das ist in etwa das, was Sie erreichen wollen:

class Molecule 
    def initialize(num, bond) 
    @num = num 
    @bond = bond 
    end 

    NAMES = {1 => 'met', 2 => 'et', 3 => 'prop', 4 => 'but'} 
    BONDS = {1 => 'ano', 2 => 'eno', 3 => 'ino'} 

    def molecule_name 
    [ NAMES[@num], BONDS[@bond] ] 
    end 
end 

a = Molecule.new(2, 1) 
a.molecule_name # => ["et", "ano"] 
0

Ich habe versucht, so wenig wie möglich zu verändern und noch ein funktionierendes Beispiel erhalten:

class Molecule 
    attr_reader :num, :bond 
    def to_s 
    "#{@num}, #{@bond}" 
    end 

    def molecule_name(num, bond) 
    @num = { 1 => 'met', 2 => 'et', 3=> 'prop', 4 => 'but'}[num] 
    @bond = {1 => 'ano', 2 => 'eno', 3 => 'ino'}[bond] 
    end 
end 

a = Molecule.new 
a.molecule_name(2,1) 
puts a 
#=> et, ano 
puts a.num 
#=>et 
puts a.bond 
#=>ano 

Dieses Beispiel würde ein bisschen mehr Rubin-ish sein:

class Molecule 
    attr_reader :num, :bond 
    @@nums = { 1 => 'met', 2 => 'et', 3=> 'prop', 4 => 'but'} 
    @@bonds = {1 => 'ano', 2 => 'eno', 3 => 'ino'} 

    def initialize(num_id, bond_id) 
    @num = @@nums[num_id] 
    @bond = @@bonds[bond_id] 
    end 

    def name 
    "#{num}, #{bond}" 
    end 
end 

a = Molecule.new(2,1) 
puts a.name 
Verwandte Themen