我非常精通编码,但偶尔我会遇到似乎基本相同的代码.我在这里的主要问题是,你为什么要使用.append()当时.after()或反之?
我一直在寻找,似乎无法找到两者之间的差异的明确定义,何时使用它们以及何时不使用它们.
一个优于另一个的好处是什么?为什么我会使用一个而不是另一个?有人可以向我解释一下吗?
var txt = $('#' + id + ' span:first').html();
$('#' + id + ' a.append').live('click', function (e) {
e.preventDefault();
$('#' + id + ' .innerDiv').append(txt);
});
$('#' + id + ' a.prepend').live('click', function (e) {
e.preventDefault();
$('#' + id + ' .innerDiv').prepend(txt);
});
$('#' + id + ' a.after').live('click', function (e) {
e.preventDefault();
$('#' + id + ' .innerDiv').after(txt);
});
$('#' + id + ' a.before').live('click', function (e) {
e.preventDefault();
$('#' + id …Run Code Online (Sandbox Code Playgroud) 我这样编码:
$.ajax({ cache: false,
url: "/Admin/Contents/GetData",
data: { accountID: AccountID },
success: function (data) {
$('#CityID').html(data);
},
error: function (ajaxContext) {
alert(ajaxContext.responseText)
}
});
Run Code Online (Sandbox Code Playgroud)
但是当我最后查看jQuery .ajax()文档时,似乎建议我应该像下面这样编码,或者至少它建议添加一个.done()和一个.fail():
var request = $.ajax({ cache: false,
url: "/Admin/Contents/GetData",
data: { accountID: AccountID }
});
request.done(function (data) {
xxx;
});
request.fail(function (jqXHR, textStatus) {
xxx;
});
Run Code Online (Sandbox Code Playgroud)
更新
如果我这样的代码是相同的,还是有一些优势将它分成三个?
$.ajax({ cache: false,
url: "/Admin/Contents/GetData",
data: { accountID: AccountID }
}).done(function (data) {
xxx;
}).fail(function (jqXHR, textStatus) {
xxx;
});
Run Code Online (Sandbox Code Playgroud) 我最感兴趣的是Java,但我认为这是一个普遍的问题.最近我一直在使用Arquillian framework(ShrinkWrap),它使用了很多方法链接.方法链接的其他实例是在方法StringBuilder,StringBuffer.使用这种方法有明显的好处:减少详细程度就是其中之一.
现在我想知道,为什么并非所有将void返回参数实现为可链接的方法?链接必然存在一些明显和客观的缺点.因为如果所有方法都是可链接的,我仍然可以选择不使用它.
我不是要求改变Java中的现有代码,这可能会破坏某些地方的某些东西,但解释为什么不使用它也会很好.我更多地要求从未来的框架(用Java编写)设计视角.
我发现了一个类似的问题,但原来的提问者实际上想知道为什么它被认为是一种好的做法:方法链 - 为什么这是一个好的做法,或不是?
虽然有一些答案可用,但我仍然不确定链接的所有优点和缺点是什么,以及将所有void方法链接起来是否有用会被认为是有用的.
"API设计就像性:做出一个错误并在你的余生中支持它" (Josh Bloch在Twitter上)
Java库中存在许多设计错误.Stack extends Vector(讨论),我们无法在不造成破损的情况下解决这个问题.我们可以尝试弃用Integer.getInteger(讨论),但它可能会永远存在.
尽管如此,某些类型的改装可以在不造成破损的情况下完成.
有效的Java第2版,第18项:首选接口到抽象类:现有的类可以很容易地进行改进,以实现新的接口".
例如:String implements CharSequence,Vector implements List,等.
有效的Java第2版,第42项:明智地使用varargs:您可以改进现有方法,该方法将数组作为其最终参数,而不是对现有客户端采取varags.
一个着名的例子是Arrays.asList引起混淆(讨论),但没有破坏.
这个问题是关于不同类型的改造:
void不破坏现有代码的情况下改进返回方法的方法?我最初的预感指向是,因为:
void退货换货是合法的(但不是相反!)Class.getMethod也不会在返回类型上区分但是,我希望听到其他在Java/API设计方面经验丰富的人进行更全面的分析.
正如标题中所建议的那样,一个动机是促进流畅的界面风格编程.
考虑这个简单的代码片段,它打印一个混洗的名称列表:
List<String> names = Arrays.asList("Eenie", "Meenie", "Miny", "Moe");
Collections.shuffle(names);
System.out.println(names);
// prints e.g. [Miny, Moe, Meenie, Eenie]
Run Code Online (Sandbox Code Playgroud)
已经Collections.shuffle(List)被宣布为返回输入列表中,我们可以这样写:
System.out.println(
Collections.shuffle(Arrays.asList("Eenie", …Run Code Online (Sandbox Code Playgroud) 在下面的代码中,updateWithContex返回作为参数的相同对象是否真的是不好的做法?
class SomeClass{
Foo updateWithContex(Foo foo){
foo.setAppId(i);
foo.setXId(index);
//.....
return foo;
}
}
class Foo{
public void setAppId(int appId)
{
//
}
public void setXId(int appId)
{
//
}
public void changeState(X x)
{
//
}
}
Run Code Online (Sandbox Code Playgroud)
在C++中,我看到过这样的代码:
BigObject&
fastTransform( BigObject& myBO )
{
// When entering fastTransform(), myBO is the same object as the function
// argument provided by the user. -> No copy-constructor is executed.
// Transform myBO in some way
return myBO; // Transformed myBO …Run Code Online (Sandbox Code Playgroud) 我必须实现一个Vector类,它设置一个多维向量的坐标,并在使用这个特定的代码调用时工作(我不能改变这部分):
const int NumOfDimensions = 5;
Vector x (NumOfDimensions);
x.Set(0, 1.1).Set(1, 1.2).Set(2, 1.3).Set(3, 1.4).Set(4, 1.5);
x.print();
Run Code Online (Sandbox Code Playgroud)
输出必须是这样的:
(1.1,1.2,1.3,1.4,1.5)
这是我尝试但无法让它工作:
class Vector {
float *coordinates;
int dimensions;
public:
Vector(int k)
{
coordinates = new float[k];
dimensions = k;
}
void Set(int k, float wsp)
{
//Vector x(k+1);
coordinates[k] = wsp;
//return x;
}
void print()
{
int i;
cout<<"(";
for(i=0; i<dimensions; i++)
cout<<coordinates[i]<<", ";
cout<<")"<<endl;
}
};
Run Code Online (Sandbox Code Playgroud)
所以我知道函数Set需要改变并且可能返回一个对象,但我尝试了很多不同的方法而且它不起作用.我应该如何修改它?
我正在使用Dictionary<string, string>作为乐器的配置,对于那些对编程知之甚少的用户来说,能够从Visual Studio中获得自动完成功能会更容易.
在Python中,我可以创建一个Dictionary并使用点运算符访问不同的值.
d = {'name':'Joe', 'mood':'grumpy'}
d.name
d.mood
Run Code Online (Sandbox Code Playgroud)
C#有办法做到这一点吗?
我意识到所有涉及的问题,因为字典只是一个通用集合(如何通用?它只是一个KeyValuePairs列表?有趣的问题).我不打算为此完成它的包装类(我希望它比使用自定义类的显式属性更灵活).
我正在尝试做一个简单的字符串操作.输入是"谋杀",我想得到"谋杀".
我试过这个
String str = "murder";
StringBuffer buf = new StringBuffer(str);
// buf is now "murder", so i append the reverse which is "redrum"
buf.append(buf.reverse());
System.out.println(buf);
Run Code Online (Sandbox Code Playgroud)
但现在我得到"redrumredrum"而不是"murderredrum".
谁能解释我的程序有什么问题?谢谢.
我想知道方法链接和流畅接口之间的确切区别。据我了解,方法链只是运行先前方法返回对象的方法,同时避免临时变量。这方面的一个例子可能是
Integer.parseInt(str).intValue()
Run Code Online (Sandbox Code Playgroud)
相对于流式接口,对象的每个方法都由一个点链接起来,而不必与前一个方法相关这两种技术使修饰符方法返回到宿主对象,以便可以在单个表达式中调用多个修饰符,如下所示:
new Car().StartsEngine().OpenWindow()
Run Code Online (Sandbox Code Playgroud)
它是否正确?
是否有任何文章介绍何时使用 const 引用作为返回类型是一个好习惯?
这不是一个关于特定问题的问题,而是一个教育问题。
我们正处于从 C 的初级水平迁移到现代 C++ 的过程中,我和我的同事的任务是指导其他一组人使用 C++,因为我们对这门语言非常熟悉。
我和这位同事就这个问题发生了轻微的争执。手头的例子是一个简单的类:
class Cls
{
private:
vector<int> vec;
public:
Cls() { /* put 3 random values in vec */ }
const vector<int>& getVec() {return vec; }
};
Run Code Online (Sandbox Code Playgroud)
我的论据来自以下事实:
参考文献应该用作返回,因为您不会浪费时间复制东西。这是直接加速。
引用应该是 const,因为如果你只返回一个引用,vec那么任何人都可以仅使用 getter 来改变它,这显然是不好的。因此我们需要返回const TYPE&吸气剂。
我的同事支持返回vector<int>并完成它。他的论点是:
所以我的问题基本上是:
是否有一些关于此主题的良好实践以及何时使用 const 引用而不是值作为返回值的文章?
虽然我和我的同事对 C++ 相当熟悉,但我们都没有专业地使用过它,所以……业界对于这个问题有标准或惯例吗?
我注意到,在使用扫描仪时,如果我想设置分隔符或区域设置等属性,则执行此操作的方法会返回对象Scanner本身:
public Scanner useDelimiter(String pattern) {
modCount++;
delimPattern = patternCache.forName(pattern);
return this;
}
Run Code Online (Sandbox Code Playgroud)
我不明白的是,如果属性被更改(而不是创建一个新对象),为什么它会返回一个Scanner对象而不是void?这并不是说我必须将返回值存储在变量中 - 事实上,如果我尝试这样做,就像下面的代码一样,Eclipse 将给出以下消息Resource leak: 'lineScanner' is not closed at this location:
Scanner scanner = new Scanner(new File("accounts.csv"));
String line;
while(scanner.hasNextLine()) {
line = scanner.nextLine();
Scanner lineScanner = new Scanner(line);
lineScanner = lineScanner.useDelimiter(",");
...
}
Run Code Online (Sandbox Code Playgroud) 在C#中使用Collection初始化器并允许在不必调用构造函数的情况下定义类的属性,在C#中使用Method Chaining有什么意义吗?我什么也看不见.也许我在这里遗漏了什么?
谢谢
driver.manage()。window()。maximize();