我制作了一个程序,它在一个数组中存储了一些名字,它首先是用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
答案 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