2016-10-31 9 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 
関連する問題