我试图编写一个ruby程序,其中包含一种方法,在从ARGF读取后将单个字母的氨基酸代码转换成相应的氨基酸名称。
这是我到目前为止的代码:
#!/usr/bin/ruby
def convert
aminos = Hash.new
aminos = {"A" => "alanine", "B" => "aspartate/asparagine", "C" => "cystine"}
output = aminos.values_at()
puts "#{output}"
end
ARGF.each_char do convert
end
如果我运行此程序,它会执行以下操作:
$ ruby amino_acid.rb ABC
[]
[]
[]
当我想要它做的时候是这样的:
$ ruby amino_acid.rb ABC
alanine
aspartate/asparagine
cystine
我不确定在
之后放在括号中的内容aminos.values_at
或者我是否走在正确的轨道上?
我想我必须将参数传递给此方法,可能类似于
def convert {|k,v| puts "#{v}}
提前致谢!
答案 0 :(得分:0)
当您想根据示例代码使用ARGF
时,您正在使用ARGV
。
code review将为您提供其他风格等途径。但我认为这会让您前进。
#!/usr/bin/env ruby
def convert(value)
aminos = { 'A' => 'alanine', 'B' => 'aspartate/asparagine', 'C' => 'cystine' }
aminos[value.upcase]
end
ARGV.to_s.each_char do |string|
puts convert string
end
当然,您可以将该语句放在您的方法中,但实际上方法应该做一个非常集中的事情。传递一个参数,而不是直接作用于ARGV,可以自由地以不同的方式使用它。一般来说,一种方法应该做一件事。让它们更容易维护。