我已经用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
复制相似问题