我有一个混合了html,text和php的PHP文件,包括名称areaname-house.php.该文件的text/html部分包含各个地方的字符串"areaname".另一方面,我有一系列带有城市名称的字符串.
我需要一个PHP脚本,它可以获取每个字符串(来自字符串数组),复制areaname-house.php并创建一个名为arrayitem-house.php的新文件,然后在新创建的文件中,将字符串"areaname"替换为arrayitem.我已经能够完成第一部分,我可以使用示例变量(城市名称)成功创建克隆文件,作为以下代码中的测试:
<?php
$cityname = "acton";
$newfile = $cityname . "-house.php";
$file = "areaname-house.php";
if (!copy($file, $newfile)) {
echo "failed to copy $file...n";
}else{
// open the $newfile and replace the string areaname with $cityname
}
?>
Run Code Online (Sandbox Code Playgroud) 这可能是一个愚蠢的问题,但我不明白:
我有一个名为Card的课程.我想使用MemberWiseClone()进行浅层克隆.理论卡继承自Object.所以它应该能够使用MemberWiseClone(),即使MWC()受到保护?
我遗失/遗忘了什么吗?
我正在使用带有CRTP的模板类来实现克隆模式,使用第二个模板参数Base来实现多级继承.当我尝试调用间接基类的构造函数时,我收到编译器错误.
class B
{
public:
B() {} //trivial constructor
virtual B* clone()=0;
};
template<class Base, class Derived>
class Clonable
:public Base //weird, I know
{
public:
virtual B* clone() {return new Derived(*this);}
};
class D1 : public Clonable<B, D1>
{
public:
D1(int a); //non-trivial constructor. Different signature than B
};
class D2 : public Clonable<D1, D2>
{
public:
D2(int a): D1(a) {} //compiler error here
}
Run Code Online (Sandbox Code Playgroud)
到目前为止我遇到的唯一解决方案是在Cloneable中使用可变参数模板构造函数,但我的编译器(VC++ 11)尚未实现它们.
我有一个Hashmap <integer, Arraylist<Double>>.我想复制一份.我在考虑使用clonehashmap的方法.经过javadoc后,它说:
clone
Returns a shallow copy of this HashMap instance: the keys and values themselves are not cloned.
Run Code Online (Sandbox Code Playgroud)
这个浅拷贝是什么意思?我想要一个单独的矩阵,其值在更新原始矩阵的值时不会改变.
为什么呢,
if( hm1 == hm1.clone())
Run Code Online (Sandbox Code Playgroud)
返回false?
.NET框架的ICloneable接口通常提供了一种支持克隆类实例的方法.
但是如果我有多个第三方类,并且不想单独关注每个属性,那么如何有效地克隆这些类的对象呢?(这些类的源代码不可用).有没有办法使用泛型和扩展方法?
我需要的是一个深度克隆,它创建一个包含所有属性和(子)对象的精确副本.
示例:假设您要UserQuery在LinqPad中克隆对象:
void Main()
{
UserQuery uc=this;
var copy=uc.CreateCopy(); // clone it
}
Run Code Online (Sandbox Code Playgroud)
我正在寻找的是一个CreateCopy()扩展,允许创建一个副本,而不必照顾这个类的细节,因为我没有自己的源UerQuery.
(注意,这UserQuery只是一个示例,用于显示我需要的内容,它也可以是PDF文档类,用户控件类,ADO.NET类或其他任何内容).
我有一个关于Java中ArrayList的clone()方法的问题.
ArrayList<HeavyOjbect> original = new ArrayList<HeavyOjbect>();
original.add(new HeavyOjbect(0));
original.add(new HeavyOjbect(1));
original.add(new HeavyOjbect(2));
ArrayList<Integer> copy = original;
copy.remove(0);
Run Code Online (Sandbox Code Playgroud)
原创 - > [HeavyOjbect1,HeavyOjbect2]
copy - > [HeavyOjbect1,HeavyOjbect2]
现在使用clone()方法
ArrayList<HeavyOjbect> original = new ArrayList<HeavyOjbect>();
original.add(new HeavyOjbect(0));
original.add(new HeavyOjbect(1));
original.add(new HeavyOjbect(2));
ArrayList<Integer> copy = (ArrayList<HeavyOjbect>) original.clone();
copy.remove(0);
Run Code Online (Sandbox Code Playgroud)
原始 - > [HeavyOjbect0,HeavyOjbect1,HeavyOjbect2]
copy - > [HeavyOjbect1,HeavyOjbect2]
对 ?
但我无法弄清楚克隆的作用.它是否克隆每个HeavyObject?我的意思是如果克隆1000倍我的ArrayList,内存是否会爆炸?
编辑:所以克隆
new HeavyOjbect(0) -> @10
new HeavyOjbect(1) -> @20
new HeavyOjbect(1) -> @30
original(ref1 to @10, ref1 to @20, ref1 to @30)
copy(ref2 to @10, ref2 …Run Code Online (Sandbox Code Playgroud) 我的代码出了什么问题?
在主要方法中我这样做:
int [] test=new int[48];
test=etable(Right[]).clone();
Run Code Online (Sandbox Code Playgroud)
我想要的是,'test'数组与'etable'方法的输出完全相同.
我的方法称为'etable':
public static int [] etable(int [] right){
int [] blabla=new int[48];
...
return blabla[]
}
Run Code Online (Sandbox Code Playgroud)
感谢您的意见
好吧,我有一个带有'MartianManager'类的程序:*注意代码不完整仍然有一些缺失的部分只是提供了整个代码,以供参考完成后它将如何完成
import java.util.ArrayList;
public class MartianManager {
private ArrayList<Martian> martians;
private ArrayList<Martian> teleporters;
public void addMartian(Martian m) {
martians.add(m);
if(m instanceof GreenMartian)
teleporters.add(m);
}
//public Object clone() {
public Martian getMartianClosestToID(int id) {
}
public void groupSpeak() {
for(Martian m : martians) {
m.speak();
}
}
public void groupTeleport(String dest) {
}
}
Run Code Online (Sandbox Code Playgroud)
和火星类:
public abstract class Martian implements Cloneable {
int id;
public Martian(int id) {
this.id = id;
}
public Object clone() throws CloneNotSupportedException {
return super.clone();
} …Run Code Online (Sandbox Code Playgroud) 这就是我想要做的事情:
import copy
def printtext(swefile):
for row in swefile:
print(row)
text = open("wordsv.txt","r",encoding="utf-8")
text2 = copy.copy(text)
printtext(text)
print(text2.readlines())
Run Code Online (Sandbox Code Playgroud)
但这是不可能的,TypeError:无法序列化'_io.TextIOWrapper'对象.所以我想知道是否有一种很好的"克隆"文本变量的方法,这样我就可以再次打印所有的行.我知道我可以再次阅读该文件,但是这个答案并没有解决我遇到的更大的问题,所以任何有关如何完成这项工作的建议都是有帮助的.
这是更大的背景,因为我无法用你的建议解决我的问题:
with open(textfilename, "r", encoding = "utf-8") as swefile:
for row in swefile:
word = row.strip()
tempfile = copy.copy(swefile)
l = getFurthest(word,tempfile)
Run Code Online (Sandbox Code Playgroud)
我想在这里发生的事情是,我想发送swefile尚未读取的部分(即通过for循环迭代)getFurthest()!而且我无法发送,swefile因为这将使整个事情被读取,因此for循环中的迭代将停止,对吧?那么我怎样才能只发送已经读过的文本文件的一部分,getFurthest()同时仍然可以在其余部分之后迭代?
我有这样的哈希:
entity = {1=> nil, 2 => {3 => nil, 4 => 1}}
Run Code Online (Sandbox Code Playgroud)
我编写了一个函数,可以使用递归删除给定实体的空值.
def clear_null_values(entity)
entity.each do |key, value|
if value == nil || value.blank?
entity.delete(key)
elsif value.is_a? Hash
clear_null_values(value)
entity.delete(key) if value.blank?
end
end
end
Run Code Online (Sandbox Code Playgroud)
而且我还需要原始实体以用于其他目的.所以我复制了哈希变量,然后清除了空值.
final_entity = entity.dup
clear_null_values(entity)
puts entity
puts final_entity
Run Code Online (Sandbox Code Playgroud)
结果:
{2 => {4 => 1}}
{1=> nil, 2 => {4 => 1}} # the nested values are overwritten.
Run Code Online (Sandbox Code Playgroud)
理想情况下,final_entity应与原始实体相同.
问题1:为什么entity.dup复制只是外部的?
问题2:如何使final_entity成为原始实体的完全副本,即使我们修改实体,那么final_entity也不应该改变?