相关疑难解决方法(0)

.append(),prepend(),. after()和.before()

我非常精通编码,但偶尔我会遇到似乎基本相同的代码.我在这里的主要问题是,你为什么要使用.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)

javascript jquery append prepend jquery-after

193
推荐指数
7
解决办法
28万
查看次数

我应该使用.done()和.fail()来获取新的jQuery AJAX代码而不是成功和错误

我这样编码:

$.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)

jquery

152
推荐指数
3
解决办法
23万
查看次数

方法链的优点和缺点以及由对象本身替换所有void返回参数的可能性

我最感兴趣的是Java,但我认为这是一个普遍的问题.最近我一直在使用Arquillian framework(ShrinkWrap),它使用了很多方法链接.方法链接的其他实例是在方法StringBuilder,StringBuffer.使用这种方法有明显的好处:减少详细程度就是其中之一.

现在我想知道,为什么并非所有将void返回参数实现为可链接的方法?链接必然存在一些明显和客观的缺点.因为如果所有方法都是可链接的,我仍然可以选择不使用它.

我不是要求改变Java中的现有代码,这可能会破坏某些地方的某些东西,但解释为什么不使用它也会很好.我更多地要求从未来的框架(用Java编写)设计视角.


我发现了一个类似的问题,但原来的提问者实际上想知道为什么它被认为是一种好的做法:方法链 - 为什么这是一个好的做法,或不是?


虽然有一些答案可用,但我仍然不确定链接的所有优点和缺点是什么,以及将所有void方法链接起来是否有用会被认为是有用的.

java design-patterns chaining

22
推荐指数
4
解决办法
1万
查看次数

改造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不破坏现有代码的情况下改进返回方法的方法?

我最初的预感指向是,因为:

  • 返回类型不会影响在编译时选择哪个方法
  • 即使你使用反射,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)

java jvm api-design binary-compatibility

14
推荐指数
1
解决办法
2302
查看次数

Java Practice:返回作为参数传递的相同对象

在下面的代码中,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)

java

8
推荐指数
1
解决办法
6530
查看次数

多点运算符(c ++类)

我必须实现一个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需要改变并且可能返回一个对象,但我尝试了很多不同的方法而且它不起作用.我应该如何修改它?

c++ method-chaining

7
推荐指数
1
解决办法
966
查看次数

我可以使用点表示法来访问字典值吗?

我正在使用Dictionary<string, string>作为乐器的配置,对于那些对编程知之甚少的用户来说,能够从Visual Studio中获得自动完成功能会更容易.

在Python中,我可以创建一个Dictionary并使用点运算符访问不同的值.

d = {'name':'Joe', 'mood':'grumpy'}
d.name
d.mood
Run Code Online (Sandbox Code Playgroud)

C#有办法做到这一点吗?

我意识到所有涉及的问题,因为字典只是一个通用集合(如何通用?它只是一个KeyValuePairs列表?有趣的问题).我不打算为此完成它的包装类(我希望它比使用自定义类的显式属性更灵活).

c#

5
推荐指数
1
解决办法
3382
查看次数

有关反转字符串的问题

我正在尝试做一个简单的字符串操作.输入是"谋杀",我想得到"谋杀".

我试过这个

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".

谁能解释我的程序有什么问题?谢谢.

java string reverse

3
推荐指数
1
解决办法
674
查看次数

方法链和流畅接口之间的区别

我想知道方法链接和流畅接口之间的确切区别。据我了解,方法链只是运行先前方法返回对象的方法,同时避免临时变量。这方面的一个例子可能是

Integer.parseInt(str).intValue()
Run Code Online (Sandbox Code Playgroud)

相对于流式接口,对象的每个方法都由一个点链接起来,而不必与前一个方法相关这两种技术使修饰符方法返回到宿主对象,以便可以在单个表达式中调用多个修饰符,如下所示:

new Car().StartsEngine().OpenWindow()
Run Code Online (Sandbox Code Playgroud)

它是否正确?

design-patterns fluent-interface fluent method-chaining

3
推荐指数
1
解决办法
2841
查看次数

在 C++ 中什么时候返回 const 引用是个好主意?

是否有任何文章介绍何时使用 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)

我的论据来自以下事实:

  1. 参考文献应该用作返回,因为您不会浪费时间复制东西。这是直接加速。

  2. 引用应该是 const,因为如果你只返回一个引用,vec那么任何人都可以仅使用 getter 来改变它,这显然是不好的。因此我们需要返回const TYPE&吸气剂。

我的同事支持返回vector<int>并完成它。他的论点是:

  1. 这是一个先进的概念,不应该从一开始就教授。我们现在可以从 getter 中按值返回(从而生成副本),并在稍后当它们能够理解幕后发生的情况时转换为引用。(我的观点是,由于我认为使用这是非常好的实践,因此应该从一开始就教授和强制执行,以便人们习惯这样做,然后我们确保每个人真正理解 const 引用含义的部分可以稍后进行因为我们可能没有时间让受训者达到可以处理参考资料的水平。)

所以我的问题基本上是:

  1. 是否有一些关于此主题的良好实践以及何时使用 const 引用而不是值作为返回值的文章?

  2. 虽然我和我的同事对 C++ 相当熟悉,但我们都没有专业地使用过它,所以……业界对于这个问题有标准或惯例吗?

c++ oop reference constants

3
推荐指数
1
解决办法
4591
查看次数

为什么 Scanner 方法不返回 void?

我注意到,在使用扫描仪时,如果我想设置分隔符或区域设置等属性,则执行此操作的方法会返回对象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)

java java.util.scanner

2
推荐指数
1
解决办法
133
查看次数

是否值得在C#中使用方法链接?

在C#中使用Collection初始化器并允许在不必调用构造函数的情况下定义类的属性,在C#中使用Method Chaining有什么意义吗?我什么也看不见.也许我在这里遗漏了什么?

谢谢

c# method-chaining

1
推荐指数
2
解决办法
821
查看次数