首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >方法应该在类内吗?在Ruby中

方法应该在类内吗?在Ruby中
EN

Code Review用户
提问于 2020-08-17 17:44:13
回答 1查看 47关注 0票数 1

我已经用Python编写了更多代码,但我现在正在学习Ruby。因此,我试图编写一个解决方案来创建一个family_tree,并添加和获取关系。下面的代码是包含从命令行调用的主函数的文件。下面的代码工作并解决了这个问题,但是我已经编写了没有类的方法。在python中,这是可以接受的。红宝石是可以接受的吗?即使代码是这样工作的,它是如何用Ruby编写的呢?或者这需要重构吗?如果是,请告诉我怎么做?

#main_file.rb

代码语言:javascript
复制
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()

执行如下:

代码语言:javascript
复制
ruby main_file.rb input.txt
EN

回答 1

Code Review用户

发布于 2020-08-17 20:02:31

这种“全局函数”风格适用于小型脚本,但不能重用。

更实际的问题是,如果您想要在函数之间共享状态,那么您就没有地方存储它(好吧,您可以使用全局变量($var),但这很容易发生冲突)。

对于更封装的设计,创建一个执行工作的类,并将方法移动到类中。例如,参见定义用法

票数 2
EN
页面原文内容由Code Review提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://codereview.stackexchange.com/questions/248048

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档