标签: chaining

是否应该在C++中链接异常?

我刚刚完成了一个C++程序,我已经实现了自己的异常(虽然派生自std :: exception).当一个异常导致连锁反应,向上传播错误并引起其他异常时,我应用的做法是在模块的每个适当步骤(读取类)中连接错误消息.即旧的异常本身被删除并创建一个新的异常,但是有一个更长的错误消息.

这可能适用于我的小程序,但我最终对我的方法不太满意.例如,除最后一个异常外,不保留行号(虽然目前不应用)和文件名; 实际上,在第一个例外中,这些信息最受关注.

我认为通过将异常链接在一起可以更好地处理这个问题; 即在新异常的构造函数中提供旧异常.但是如何实施呢?当它们超出方法的范围时,异常是否会死亡,从而阻止使用异常指针?如果异常可以是任何派生类,如何复制和存储异常?

这最终促使我考虑在C++中链接异常是否是一个好主意.也许应该只创建一个异常然后添加额外的数据(就像我一直在做的那样,但可能会以更好的方式)?

你对此有何回应?是否应将由另一个引起的异常链接在一起以保留某种"异常追踪" - 以及如何实施? - 或者是否应该使用单个例外并附加其他数据 - 应该如何做?

c++ exception chaining nested-exceptions

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

代码提示自定义函数/对象/常量,以及链接,Adobe Dreamweaver CS5中的注释

在Dreamweaver CS5中有一种叫做代码提示的东西(让我们简称为CH).

CH有一堆关于核心库中构建的函数,常量和对象的信息.当您按CTRL+ SPACEBAR或开始构建一个以语句开​​头的语句时$,会弹出一个包含大量信息的窗口,向我提供有关它的信息,而无需自己查找.如果我ENTER在CH启动时按下并选择了某些内容,它将自动为我填写其余内容.

我喜欢这个功能,我真的很喜欢.提醒我一点Intellisense.
它节省了我很多时间. 代码提示示例,显示mysql_connect代码提示

我面临的问题,并没有找到任何解决方案,很简单.


问题#1链式方法不显示代码提示

由于PHP实现了类和对象,我已经能够在类/对象中链接我的方法.链接实际上很简单,通过返回$this(该类的实例),您可以拥有一个连续的调用链

class Object_Factory{
    public function foo(){
        echo "foo";
        return $this;
    }
    public function bar(){
        echo "bar";
        return $this;
    }
}        

$objf = new Object_Factory;
//chaining
$objf->foo()
     ->bar();
Run Code Online (Sandbox Code Playgroud)

单独调用它们会显示CH.

$objf->foo();
$objf->bar();
Run Code Online (Sandbox Code Playgroud)

问题是,在调用第一个方法并尝试链接另一个方法之后,没有CH显示下一个调用信息.

链接方法时代码提示失败

所以,这是我的第一个问题:
在Dreamweaver CS5中,有没有办法让代码提示出现在链接上?
插件,我找不到的一些设置,什么?

if("no") "Could you explain why?";
Run Code Online (Sandbox Code Playgroud)

问题#2 自定义函数,对象和常量的代码提示

如第一张图所示,弹出了很多信息.事实上,在线图书馆里有一个类似的文件.常量通常具有非常小的信息,例如数字. 代码提示一个常量,信息窗口中的数字为3
在此图像中,MYSQL_BOTH代表3.

这是我的第二个问题:
是否有可能在CH窗口中获取自定义函数,对象和常量的一些信息?

例如,使用Intellisense,您可以使用带有HTML标记和三个斜杠的设置///

///<summary> …
Run Code Online (Sandbox Code Playgroud)

php dreamweaver chaining code-hinting flash-cs5

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

ostream链接,输出顺序

我有一个函数,它将ostream引用作为参数,将一些数据写入流,然后返回对同一个流的引用,如下所示:

#include <iostream>

std::ostream& print( std::ostream& os ) {
  os << " How are you?" << std::endl;
  return os;
}

int main() {
  std::cout << "Hello, world!" << print( std::cout ) << std::endl;
}
Run Code Online (Sandbox Code Playgroud)

此代码的输出是:

 How are you?
Hello, world!0x601288
Run Code Online (Sandbox Code Playgroud)

但是,如果我将链接表达式分成两个语句,就像这样

int main() {
  std::cout << "Hello, world!";
  std::cout << print( std::cout ) << std::endl;
}
Run Code Online (Sandbox Code Playgroud)

然后我至少在输出中得到正确的顺序,但仍然得到一个十六进制值:

Hello, world! How are you?
0x600ec8
Run Code Online (Sandbox Code Playgroud)

我想了解这里发生了什么.正常函数是否优先operator<<,这就是输出顺序反转的原因?编写将数据插入到一个ostream但也可以链接的函数的正确方法是什么operator<<

c++ iostream chaining

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

如何使用下划线的链方法返回多维数组中的第一项?

假设我有一个数组数组,我想返回数组中每个数组的第一个元素:

array = [[["028A","028B","028C","028D","028E"],
          ["028F","0290","0291","0292","0293"],
          ["0294","0295","0296","0297","0298"],
          ["0299","029A","029B","029C","029D"],
          ["029E","029F","02A0","02A1","02A2"]],
         [["02A3","02A4"],
          ["02A5", "02A6"]];
Run Code Online (Sandbox Code Playgroud)

我知道我可以这样做:

var firsts = [];
_.each(array, function(item){
  _.each(item, function(thisitem){
    firsts.push(_.first(thisitem));
  });
});
Run Code Online (Sandbox Code Playgroud)

但是,如果我想用下划线的_.chain()方法做什么呢?只是学习下划线,到目前为止似乎非常有用.

javascript chaining chain underscore.js

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

如何将groovy的太空船操作员连接起来进行多级排序?

Groovy拥有太空船操作员<=>,提供了一种简单的方法来实现比较.我怎样才能以更加时髦的方式将其链接到下面的代码?在这个例子中,我想首先按价格比较项目,然后按名称比较两个具有相同价格的项目.


class Item implements Comparable {
  int price
  String name

  int compareTo(Item other) {
    int result = price <=> other.price
    if (result == 0) {
      result = name <=> other.name
    }
    return result
  }
}
Run Code Online (Sandbox Code Playgroud)

groovy chaining spaceship-operator

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

Angular2 - 如何在组件中链接异步服务调用(http请求)?

我有一个组件,首先需要调用POST的服务.然后在同一个组件中我想等到POST完成后,调用另一个获取数据的服务.

如何进行GET调用等待POST调用完成?

在new-version.component.ts中:

private createNewVersion(value) {
    ...

    // create new version, then call on all available versions

    // POST call
    this._newVersionService.createNewVersion(vnr);

    // GET call
    this._versionService.getAvailableVersions(); 

    ...
}
Run Code Online (Sandbox Code Playgroud)

在new-version.service.ts中:

export class NewVersionService {

response$: Subject<any>;

constructor(private _http: Http) {
    this.response$ = new BehaviorSubject<any>(null);
 }

public createNewVersion(versionNr) {    
    this._http.post('http://localhost:8080/services/' + versionNr, null, {
        method: 'POST',
    })
    .subscribe(response => {
        this.response$.next(response.status);
    },
    error => console.error(error));
}
Run Code Online (Sandbox Code Playgroud)

谢谢!

asynchronous http chaining angular

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

Angular2 - 无法在嵌套调用中读取未定义的属性"subscribe"

我已经看了很多资源,包括这个,这个这个,但是我还没有达到预期的效果.

我要做的就是验证用户身份(使用firebase)然后进行身份验证后,加载他们的配置文件并将其存储在变量中,userProfile然后再加载下一页Dashboard:

我的登录服务:

public signinUser(user: User) {
    this.af.auth.login({
        email: user.email,
        password: user.password
    },
        {
            provider: AuthProviders.Password,
            method: AuthMethods.Password
        }

    )
        .then(                
        success => {
            console.log('Authenticated');
            this.getProfile().subscribe( // PROBLEM is here
                profile => {
                    console.log(profile);
                    console.log('Profile Loaded');
                    this.router.navigate(['/dashboard']);
                }
            )               
        }
        )
        .catch(function (error) {
            ...
            console.log('ERROR SIGNING USER IN');
        }
Run Code Online (Sandbox Code Playgroud)

我的getProfile()方法:

public getProfile(): Observable<any> {            
        return this.af.database.object('/profiles/' + this.user.uid)
        .flatMap(
            profile => {
                console.log('inside success');
                console.log(profile);
                this.userProfile = <User>profile;                    
                console.log('getProfile …
Run Code Online (Sandbox Code Playgroud)

asynchronous callback chaining observable angular

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

资源垃圾收集得太早

我已经使用SWIG创建了一个PHP扩展,一切正常,但是当链接方法调用时,我正在观察一些奇怪的垃圾收集行为.例如,这有效:

$results = $response->results();
$row = $results->get(0)->iterator()->next();
printf('%s %s' . "\n", $row->getString(0), $row->getString(1));
Run Code Online (Sandbox Code Playgroud)

但这段错误:

$row = $response->results()->get(0)->iterator()->next();
printf('%s %s' . "\n", $row->getString(0), $row->getString(1));
Run Code Online (Sandbox Code Playgroud)

唯一的区别是第一个创建$results,而第二个将调用链接在一起.

SWIG实际上只向PHP公开函数并生成PHP代理类以与它们进行交互.这些代理类基本上包含一个传递给每个公开函数的资源以及这些函数通常采用的其他参数.考虑到这些代理类可能是问题所在,我重新编写代码来绕过它们,而是直接使用公开的函数.和以前一样,这有效:

$results = InvocationResponse_results($response->_cPtr);
$row = TableIterator_next(Table_iterator(Tables_get($results, 0)));
printf('%s %s' . "\n", Row_getString($row, 0), Row_getString($row, 1));
Run Code Online (Sandbox Code Playgroud)

再次,这段错误:

$row = TableIterator_next(Table_iterator(Tables_get(InvocationResponse_results($response->_cPtr), 0)));
printf('%s %s' . "\n", Row_getString($row, 0), Row_getString($row, 1));
Run Code Online (Sandbox Code Playgroud)

同样,唯一的区别是第一个创建$results,而第二个将调用链接在一起.

此时,我花了一些时间在gdb/valgrind中进行调试,并确定在InvocationResponse_results将调用链接在一起时过早调用返回的析构函数.为了观察,我std::cout在暴露的C++函数及其析构函数的顶部插入了语句.这是没有链接的输出:

InvocationResponse_results()
Tables_get()
Table_iterator()
TableIterator_next()
__wrap_delete_TableIterator
Row_getString()
Row_getString()
Hola Mundo
---
__wrap_delete_InvocationResponse
__wrap_delete_Row
__wrap_delete_Tables
Run Code Online (Sandbox Code Playgroud)

--- …

php swig garbage-collection php-extension chaining

9
推荐指数
1
解决办法
565
查看次数

怎么写得更好?Ruby Sequel链接OR

在SQL中它应该如下所示:

SELECT * FROM `categories_description_old` WHERE ((`categories_description` = '') OR (`categories_name` = '') OR (`categories_heading_title` = ''))
Run Code Online (Sandbox Code Playgroud)

我(丑陋)的解决方案:

conditions = [:categories_name, :categories_heading_title, :categories_description]
b = table_categories_description_old.filter(conditions.pop => "")
conditions.each do |m|
 b = b.or(m => "")
end
Run Code Online (Sandbox Code Playgroud)

是否有更好的解决方案来链接或条件?

ruby chaining sequel

9
推荐指数
2
解决办法
2036
查看次数

在Javascript中通过一系列承诺传递状态有哪些模式?

我正在尝试学习一些关于Node和异步编程的知识.我读到了Promises,并试图在一个小项目中使用它们,这个项目将用户的帖子从服务A复制到服务B.我在理解如何最好地在Promises之间传递状态时遇到一些麻烦

该项目是使用Promise库为NodeJS编写的

我当前问题的一个简单定义是:

  • 如果服务B中尚不存在帖子,则将用户的帖子从服务A复制到服务B.
  • 这两种服务都提供http API,需要一个不易记忆的用户ID来查找该用户的帖子,因此必须从用户名中查找用户ID.
  • 所有的http调用都是异步的.

这是一些伪代码,说明了我如何将Promise链接在一起.

Promise.from('service_A_username')
  .then(getServiceAUserIdForUsername)
  .then(getServiceAPostsForUserId)
  .then(function(serviceAPosts) {
    // but what? store globally for access later?
    doSomethingWith(serviceAPosts);
    return Promise.from('service_B_username');
  })
  .then(getServiceBUserIdForUsername)
  .then(getServiceBPostsForUserId)
  .done(function(serviceBPosts) {
    // how do we interact with Service A posts?
    doSomethingThatInvolvesServiceAPostsWith(serviceBPosts); 
  });
Run Code Online (Sandbox Code Playgroud)

我想过要做的一些事情:

  1. 将getIdForUsername调用带入getPostsForUserId函数.但是,我希望保持每个功能单元尽可能简单,遵循"做一件事,做得好"的原则.
  2. 创建一个"上下文"对象并将其传递给整个链,在此对象中读取和存储状态.然而,这种方法使得每个功能都非常适用于链条,因此难以单独使用.

还有其他选择,建议采用什么方法?

javascript asynchronous chaining node.js promise

9
推荐指数
2
解决办法
1353
查看次数