我想创建一个代码来命名有机化合物。我如何使用参数(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