2016-10-31 113 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