我已经用Python编写了更多代码,但我现在正在学习Ruby。因此,我试图编写一个解决方案来创建一个family_tree,并添加和获取关系。下面的代码是包含从命令行调用的主函数的文件。下面的代码工作并解决了这个问题,但是我已经编写了没有类的方法。在python中,这是可以接受的。红宝石是可以接受的吗?即使代码是这样工作的,它是如何用Ruby编写的呢?或者这需要重构吗?如果是,请告诉我怎么做?
#main_file.rb
require_relative 'family'
require_relative 'family_tree'
include FamilyTree
require_relative 'constants'
require_relative 'errors'
def is_valid_input(command)
  #User input Validation
  commands = command.split(' ')
  return false unless (commands && INPUT_FUNCTION_MAPPER.key?(commands[0]))
  return false if (commands[0] == "ADD_CHILD" && commands.length != 4)
  return true
end
def create_family_tree(family_tree)
  #Initializing the family
  family_name = family_tree[:name]
  members = family_tree[:members]
  family = Family.new(family_name)
  members.each do |name, gender, mother_name|
    family.add_member(name, gender, mother_name)
  end
  family
end
def execute_command(command, family)
  result = nil
  unless is_valid_input(command)
    raise InvalidParametersError, "Command is not valid"
  end
  command = command.split(" ")
  if command[0] == "ADD_CHILD"
    mother, name, gender = command[1..]
    result = family.add_member(name, gender, mother)
  end
  result
end
def main_method
  if ARGV.length != 1
    raise InvalidParametersError, "Please provide an input file"
  end
  input_file = ARGV[0]
  unless File.file?(input_file)
    raise InvalidParametersError, "Input file does not exist"
  end
  family = create_family_tree(FAMILYTREE)
  File.readlines(input_file).each do |line|
    line = line.strip
    puts execute_command(line, family)
  end
end
main_method()执行如下:
ruby main_file.rb input.txthttps://codereview.stackexchange.com/questions/248048
复制相似问题