标签: method-chaining

是什么决定了jQuery链中方法的执行顺序?

HTML代码

<div id="foo">
    <h1>foo</h1>
    <p>Pellentesque habitant morbi tristique.</p>
</div>
<div id="bar">
    <h1>bar</h1>
</div>
Run Code Online (Sandbox Code Playgroud)

jQuery代码

$('#bar').click(function () {
    $('#foo p').hide('slow').appendTo('#bar').show('slow');
})
Run Code Online (Sandbox Code Playgroud)

预期结果

单击#bar时

  1. 隐藏p元素#foo
  2. 附加p#bar
  3. 显示p哪个现在是孩子的#bar

实际结果

  1. 附加p#bar
  2. 隐藏p元素#foo
  3. 显示p哪个现在是孩子的#bar

问题

  • 是什么决定了jQuery链中方法的执行顺序?
  • 如何确保每个事件在下次启动之前完成?

javascript jquery method-chaining

10
推荐指数
2
解决办法
3469
查看次数

实现支持方法链的Scala特征的最佳实践

我想创建一个特性,为类添加一些属性,并使链式方法成为可能.在Scala 2.8.1中测试过.

trait SomeProperty {
    var prop : String = "default"
    def setProp(s: String) = {
        prop = s
        this
    }
}
sealed abstract class Value
case class IntegerValue(v: Int) extends Value
case class FloatValue(v: Float) extends Value with SomeProperty {
    def foo() = { println("I'm foo.") }
}
case object UnknownValue extends Value with SomeProperty {
    def bar() = { println("I'm bar.") }
}

scala> val x = UnknownValue
scala> x.setProp("test").bar()
<console>:10: error: value bar is not a member …
Run Code Online (Sandbox Code Playgroud)

scala traits method-chaining

10
推荐指数
1
解决办法
3827
查看次数

如何链接我的方法调用?

我有一个对象:

var mubsisapi = {
        step1   : function(){alert("a")}, 
        step2   : function(){alert("b")}
    }

$.extend(false, mubsisapi)
mubsisapi.step1().step2();
Run Code Online (Sandbox Code Playgroud)

这是给予step1()但不给予step2().step2()没有发出警报.我怎样才能做到这一点?

javascript jquery method-chaining

10
推荐指数
2
解决办法
3558
查看次数

用R链接的方法

是否可以在R中链接函数?

样本数据:

m <- matrix(c(1:10, 11:20), nrow = 10, ncol = 2)
Run Code Online (Sandbox Code Playgroud)

例如,我想替换以下语句:

step1 <- mean(m)
step2 <- sum(step1)
res <- step2
Run Code Online (Sandbox Code Playgroud)

要么,

res <- sum(mean(m))
Run Code Online (Sandbox Code Playgroud)

有这样的事情:

res <- m@mean()@sum()
Run Code Online (Sandbox Code Playgroud)

在某些情况下,这将大大澄清我的代码.

EDIT1这是一个虚拟的例子.我随机选择了'sum'和'mean'.

Ben使用%@%给出了第一个答案,但它阻止在函数中使用额外的参数:

m %@% function1(arg1, arg2) %@% function2(arg1, arg2)
Run Code Online (Sandbox Code Playgroud)

我该如何解决这个问题?

EDIT2添加一个例子

require(xts)
require(PerformanceAnalytics)
xts.ts <- xts(rnorm(231),as.Date(13514:13744,origin="1970-01-01"))
plot(na.omit(lag( rollapply(xts.ts, width=rolling.per-1, FUN= function(x){sqrt(var(x))*sqrt(252)}), k=1)), main = "Dummy Example")
Run Code Online (Sandbox Code Playgroud)

这个例子似乎适用于Charles解决方案:

`%@%` <- function(x, f) eval.parent(as.call(append(as.list(substitute(f)), list(x), 1)))
xts.ts %@% rollapply( width = rolling.per-1, FUN= function(x) x%@%var%@%sqrt * sqrt(252) ) %@% lag( k=1) …
Run Code Online (Sandbox Code Playgroud)

r method-chaining

10
推荐指数
4
解决办法
2783
查看次数

如何在Ruby中正确链接自定义方法?

我正在尝试为以下两种方法执行链接方法.运行此代码后,我不断获得以下输出:

#<SimpleMath:0x007fc85898ab70>% 
Run Code Online (Sandbox Code Playgroud)

我的问题是:链接方法的正确方法是Ruby什么?

这是我的代码:

class SimpleMath


    def add(a,b=0)
        a + b
        return self
    end


    def subtract(a,b=0)
         a - b
        return self
    end

end
newNumber = SimpleMath.new()
print newNumber.add(2,3).add(2)
Run Code Online (Sandbox Code Playgroud)

ruby methods ruby-on-rails method-chaining

10
推荐指数
2
解决办法
7416
查看次数

如何在IntelliJ中停止展开流畅的API

我正在使用IntelliJ IDEA 13.1.5编写使用流畅API的Java代码,我注意到当我关闭一个"流畅"代码部分的块时,IDEA会自动将"流畅"代码扁平化为一行.

例如,如果我有这个方法:

public int sendMessage(Message message) {
  Response response = JerseyClientHelper.target(serverUrl)
            .header("User-Agent", userAgent)
            .post(Entity.entity(message));
  return response.getStatus();
}
Run Code Online (Sandbox Code Playgroud)

我尝试将其包装在一个新的'if'块中,然后我将输入if条件并打开块:

public int sendMessage(Message message) {
  if (message != null) {
    Response response = JerseyClientHelper.target(serverUrl)
              .header("User-Agent", userAgent)
              .post(Entity.entity(message));
    return response.getStatus();
    // Didn't type the '}' to close the block yet
}
Run Code Online (Sandbox Code Playgroud)

但是只要我键入}以关闭块,IntelliJ就会将代码展平为一行:

public int sendMessage(Message message) {
  if (message != null) {
    Response response = JerseyClientHelper.target(serverUrl).header("User-Agent", userAgent).post(Entity.entity(message));
    return response.getStatus();
  }
}
Run Code Online (Sandbox Code Playgroud)

有没有办法禁用流畅的API自动展平?我查看了"代码样式 - > Java"和"代码样式 - >常规"部分,但找不到任何与此特别相关的内容.

java formatting indentation intellij-idea method-chaining

10
推荐指数
1
解决办法
2237
查看次数

与嵌套对象的生成器模式

嗨,我遇到了问题.

我想实现构建器模式以使创建对象更容易.我面临的问题与嵌套对象有关.我想要创建的对象中有一个其他对象的列表,我真的不知道如何解决它.

我希望能够执行以下操作(例如,更简单的对象):

Receipt RestaurantReceipt = new ReceiptBuilder()
.withDate("value")
.withName("value")
.AddItem("value")
    .WithIngredients("value")
    .WithType("value")
.AddItem("value")
    .WithIngredients("value")
    .WithType("value")
.build();
Run Code Online (Sandbox Code Playgroud)

或类似的东西:

Receipt RestaurantReceipt = new ReceiptBuilder()
.withDate("value")
.withName("value")
.AddItem("value", item => {
  .WithIngredients("value")
  .WithType("value")
})
.AddItem("value", item => {
  .WithIngredients("value")
  .WithType("value")
})
.build();
Run Code Online (Sandbox Code Playgroud)

示例应该代表我的情况,尽管如果有多种类型的嵌套对象.

c# design-patterns fluent method-chaining builder-pattern

10
推荐指数
1
解决办法
2684
查看次数

方法链中的泛型类型参数推断

在阅读完这个问题之后,我开始考虑Java 8中的泛型方法.具体来说,当链接方法时,泛型类型参数会发生什么.

对于这个问题,我将使用Guava的一些通用方法ImmutableMap,但我的问题更为通用,可以应用于所有链式泛型方法.

考虑ImmutableMap.of具有此签名的泛型方法:

public static <K, V> ImmutableMap<K, V> of(K k1, V v1)
Run Code Online (Sandbox Code Playgroud)

如果我们使用这个泛型方法声明a Map,编译器会正确推断泛型类型:

Map<String, String> map = ImmutableMap.of("a", "b");
Run Code Online (Sandbox Code Playgroud)

我知道从Java 8开始,编译器推理机制已得到改进,即它从上下文中推断出通用类型的方法,在本例中是一个赋值.

上下文也可以是方法调用:

void someMethod(Map<String, String> map) { 
    // do something with map
}

someMethod(ImmutableMap.of("a", "b"));
Run Code Online (Sandbox Code Playgroud)

在这种情况下,泛型类型ImmutableMap.of是从参数的泛型类型推断出来的someMethod,即.Map<String, String> map.

但是当我尝试使用ImmutableMap.builder()和链接方法来构建我的地图时,我得到一个编译错误:

Map<String, String> map = ImmutableMap.builder()
    .put("a", "b")
    .build(); // error here: does not compile
Run Code Online (Sandbox Code Playgroud)

错误是:

Error:(...) java: incompatible types: 
ImmutableMap<Object, Object> …
Run Code Online (Sandbox Code Playgroud)

java generics methods method-chaining java-8

10
推荐指数
1
解决办法
611
查看次数

链式方法能力无需使用php的新关键字

我正在编写一个必须像这样调用的脚本:

$father = Father::firstName('Esaaro')->lastName('Ozaaraa')->age(42);

Person::firstName("Soobaasaa")->lastName( "Ozaaraa")->age(17)
  ->setFather( $father )-> toArray();
Run Code Online (Sandbox Code Playgroud)

所以我们有两个名为Person和的类Father.

firstName两个类的static方法是方法和其他方法public.

这是我的文件结构

<?php

class Person
{
    protected static $name;
    protected $lastName, $age, $father, $result;

    public static function firstName($name = null)
    {
        self::$name = $name;
    }

    public function lastName($lastName = null)
    {
        $this->lastName = $lastName;
    }

    public function age($age = null)
    {
        $this->age = $age;
    }

    public function toArray()
    {

    }

    public function setFather(Father $father)
    {

    }
}


    /* …
Run Code Online (Sandbox Code Playgroud)

php method-chaining

10
推荐指数
2
解决办法
208
查看次数

如何在C#中创建Fluent接口,对某些方法有一些限制?

见下面的代码:

new ConditionCreator()
       .Add()
             .Or()
       .Add()
             .And()
       .Add()
Run Code Online (Sandbox Code Playgroud)

我想为此创建一个Fluent接口但是我需要,在Add()方法开发人员看到Only Or()或And()之后,在其中一个之后,请参阅Only Add()方法.

所以没有人可以编写如下代码:

new ConditionCreator()
           .Add()
           .Add()
           .Add()
           .Or()
           .And()
           .Add()
           .And()
           .And()
Run Code Online (Sandbox Code Playgroud)

我希望有一些限制,一些方法可以接受特殊的方法等.我可以在一个类中编写所有方法,并为每一个返回这个,但这是不合适的!

请指导我如何编写Advanced Fluent Interface类.

c# fluent-interface method-chaining

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