使用ruby切换字符串句子中的单词

时间:2017-08-17 16:17:21

标签: ruby

我制作了一个程序,它在一个数组中存储了一些名字,它首先是用gets.chomp来询问用户输入,在输入ADD Name之后,它使用push和DEL Name将名称添加到一个数组中,以删除它数组中的名称,现在我想输入“REPLACE Name1 Name2”以将Name1替换为数组中的Name2。 提前谢谢你:)

class Base
  @@names_array = Array.new(0)

  def set_names_array(name)
  @@names_array.push(name)
  end

  def get_names_array
    return @@names_array
  end

  def delete_name(name)
    @@names_array.delete(name)
  end
end


class Op
  loop_flag = true
  puts "Type ADD 'name' to add a name, DEL 'name' to delete, and EXIT to end program."

  while loop_flag
    command = gets.chomp
    @nameobj = Base.new

    if command[0..2] == "ADD"
      @@name = command[4, command.length]

      @nameobj.set_names_array(@@name)

      puts "#{@@name} was added."
      puts "Names:"
      puts "#{@nameobj.get_names_array}"
    end

    if command == "EXIT"
      puts "Ended."
      loop_flag = false
    end

    if command[0..2] == "DEL"
      for i in @nameobj.get_names_array
        if i == command[4, command.length]
          @nameobj.delete_name(i)
          puts "Names:"
          puts "#{@nameobj.get_names_array}"
        end
      end
    end

    if command[0..2] == "REP"
    # cannot do [4, command.length] because there will be 2 names with
    # various lengths which aren't fixed.
    end

  end
end

2 个答案:

答案 0 :(得分:2)

您可以将此方法添加到const arr = [ { "id": "uniqueParentId1", "children": [ { "childProp1": "test1", "childProp2": "test3" } ] }, { "id": "uniqueParentId2", "children": [ { "childProp1": "somevals", "childProp2": "other vals" }, { "childProp1": "somevals 1", "childProp2": "other vals 1" } ] } ]; let combined = []; arr.forEach((parent) => { const {id, children} = parent; children.forEach((child) => { Object.assign(child, { parentId: id }); combined.push(child); }); }); console.log(combined); /* [ { "parentId": "uniqueParentId1", "childProp1": "test1", "childProp2": "test3" }, { "parentId": "uniqueParentId2", "childProp1": "somevals", "childProp2": "other vals" } { "parentId": "uniqueParentId2", "childProp1": "somevals 1", "childProp2": "other vals 1" } ] */

Base class

答案 1 :(得分:1)

这里有很多事情需要注意,但最重要的是同时 您可以将自由格式代码放入类或模块定义中 除非你没有其他的情况,否则这种做法会让人气馁 选择,就像你在课堂或模块层面做一些元编程一样。

在几乎所有其他情况下,您都希望在其中表达该代码 主要上下文,在这些定义之外,或在明确定义之内 您可以根据需要调用的方法。

深入挖掘,您定义的基类似乎使用了类级别 变量专有。这意味着:py:attr:生成的所有对象 即使技术上不同,功能相同。你可能是什么 want是一个简单的单例版本:

new

现在使用它非常简单,我将在一秒钟内演示。下一个 要解决的问题是解析器类通过大幅减少其责任。 您可以使用正则表达式来定义一个灵活的简单语法, 并且可以很容易地适应更多不寻常的用例:

module NameRegistry
  def self.names
    @names ||= [ ]
  end
end

这会导致一大堆主代码看起来像这样:

class CommandParser
  def parse(line)
    case (line)
    when /\AADD\s+(.*)\z/i
      NameRegistry.names.push($1)
    when /\ADEL\s+(.*)\z/i
      NameRegistry.names.delete($1)
    when /\AREP\s+(.*)\s+WITH\s+(.*)\z/i
      if (NameRegistry.names.delete($1))
        NameRegistry.names.push($2)
      end
    when /\AEXIT\z/i
      # Signal that this command was terminal
      return false
    end

    # Default to success
    true
  end
end