2016-10-31 76 views
-1

我想创建一个代码来命名有机化学化合物。我如何使用参数(num,bond)作为哈希键?忽略我对全局变量做了什么,只是想了解我的意图。使用参数ruby作为哈希键

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

你的意图仍然不清楚。你究竟想在这里做什么?什么是预期的输出? –

+0

你的意思是使用'[]'例如'@num [num]'等等? – mikej

+0

不清楚你在问什么。你期待'a.molecule_name(2,1)'返回什么?像'[“et”,“ano”]'? –

回答

1

的问题是有点不清楚,但我想这大概是你想达到什么目的:

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

我试图修改尽可能少的情况下仍能工作示例:

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 

这个例子将是一个有点更红宝石肥胖型:

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