使用参数ruby作为散列键

  • 本文关键字:参数 ruby ruby
  • 更新时间 :
  • 英文 :


我想创建一个代码来命名有机化合物。我如何使用参数(num, bond)作为散列的键?忽略我对全局变量所做的事情,这只是对我打算做的事情有一个大致的了解。

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 

这个问题有点不清楚,但我认为这大致是您想要实现的:

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"]

我尝试修改尽可能少,仍然得到一个工作的例子:

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

这个例子会更像ruby:

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

最新更新