小编jjm*_*jjm的帖子

使用可选参数和回调来干掉JavaScript函数

在Node.js中,由于多种原因,习惯/推荐将回调函数作为最后一个参数传递给函数.可能还有一个或多个可选参数,我们希望在回调之前传递这些参数.你最终会看到很多非常重复的代码,例如

// receiveMessages([options], [callback])
function receiveMessages(options, callback) {
   if(typeof options === 'function'){
      callback = options;
      options = {}; // or some other sensible default
   }
   //...
 }
Run Code Online (Sandbox Code Playgroud)

添加其他可选参数意味着添加额外的检查,当然:

 // through([dest], [options], [callback])
 function through(dest, options, callback) {
     if(typeof dest === 'function'){
        callback = dest;
        dest = noop();
        options = {};
     }else if(typeof options === 'function'){
        callback = options;
        options = {};
     }
     // ...
 }
Run Code Online (Sandbox Code Playgroud)

编辑这种模式似乎 标准库也是如此.

我可以想到一些干扰它的hacky方法,但我想知道是否有人有一个特别优雅或通用的解决方案来获得绑定到正确位置参数的参数.

javascript node.js

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

从SQL函数返回布尔值

我正在尝试在postgres中编写PL/pgSQL函数,返回一个布尔表达式.目前代码如下所示:

CREATE OR REPLACE FUNCTION is_visible_to(role integer, from_role integer)
  RETURNS boolean
  LANGUAGE SQL STABLE STRICT AS $$
    RETURN $1 = $2 OR first_predicate($1, $2) OR second_predicate($2, $1);
 $$;
Run Code Online (Sandbox Code Playgroud)

函数first_predicate和second_predicate存在并返回布尔值,但是我没有得到很多帮助来查看它们,因为它们的定义类似于

SELECT COUNT(*) > 0 FROM ... WHERE ...
Run Code Online (Sandbox Code Playgroud)

我收到以下语法错误:

ERROR:  syntax error at or near "RETURN"
LINE 4:     RETURN $1 = $2 first_predicate($1, $2) OR second_predicate(...
            ^
Run Code Online (Sandbox Code Playgroud)

显然我在这里误解了一些相当重要的东西.我对整个PL/pgSQL事情都不熟悉,所以也可以赞赏一两个好教程的链接.

我正在开发的项目专门使用postgres,并且已经包含了很多postgres特定的代码,因此解决方案不必移植到其他数据库.

编辑: 修正了我自己

CREATE FUNCTION is_visible_to (role integer, from_role integer)
  RETURNS BOOLEAN AS '
    DECLARE
        role ALIAS FOR $1;
        from_role ALIAS FOR $2; …
Run Code Online (Sandbox Code Playgroud)

sql postgresql stored-procedures plpgsql

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

通过采样/插值减小大型数据集的大小,以提高图表性能

我有一个大集(> 2000)的时间序列数据,我想在浏览器中使用d3显示.D3非常适合向用户显示数据的子集(约100个点),但我还想要一个"上下文"视图(如此)来显示整个数据集并允许用户选择作为子区域来详细查看.

但是,当尝试在d3中显示那么多点时,性能非常糟糕.我觉得一个很好的解决方案是选择一个数据样本,然后使用某种插值(样条,多项式等,这是我知道该怎么做的部分)来绘制一条与之类似的曲线.实际数据.

但是,我不清楚我应该如何选择子集.数据(如下所示)具有相当平坦的区域,其中适当插值所需的样本较少,而其他区域的绝对导数非常高,需要更频繁的采样.

更复杂的是,数据存在间隙(产生它的传感器失效或超出范围),我想在图表中保留这些间隙而不是通过它们进行插值.然而,间隙的检测相当简单,并且在通过插值绘制整个数据集之后简单地将它们剪切掉似乎是合理的解决方案.

我在JavaScript中这样做,但任何语言的解决方案或问题的数学答案都可以.

有问题的数据

javascript math interpolation d3.js

5
推荐指数
2
解决办法
2137
查看次数

使用 AWS SQS 时,是否有任何理由更喜欢使用 GetQueueUrl 而不是根据区域、账户 ID 和名称构建队列 URL?

我有一个使用单个 SQS 队列的应用程序。

为了灵活性,我想使用队列名称、SQS 区域和 AWS 账户 ID(以及普通的 AWS 凭证等)来配置应用程序,而不是提供完整的队列 url。

GetQueueUrl当我可以使用类似以下内容(在 ruby​​ 中)构建队列时,用于检索队列的 url是否有意义:

region = ENV['SQS_REGION'] # 'us-west-2'
account_id = ENV['SQS_AWS_ACCOUNT_ID'] # '773083218405'
queue_name = ENV['SQS_QUEUE_NAME'] # 'test3'
queue_url = "https://sqs.#{region}.amazonaws.com/#{account_id}/#{queue_name}
# => https://sqs.us-west-2.amazonaws.com/773083218405/test3 
Run Code Online (Sandbox Code Playgroud)

可能不会的可能原因:

  • 亚马逊可能会更改其网址格式。
  • 其他的???

amazon-sqs amazon-web-services

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

Lua库中的Strange C语法

我看到这样的功能整个火炬库的C代码:

long THTensor_(storageOffset)(const THTensor *self)
{
  return self->storageOffset;
}
Run Code Online (Sandbox Code Playgroud)

这是一个预处理器的东西,还是具体的lua?我认为这个想法与"类"中storageOffset的一种排序方法有关THTensor,但我从未见过这种语法.

c lua torch

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

目标C中的指针值

我正在使用OpenGL着色器,它更喜欢C字符串到NSStrings,而且我遇到了以下奇怪的问题:

相关事实是这样的

1)shaderSource定义为

NSString* shaderSource
Run Code Online (Sandbox Code Playgroud)

2)glShaderSource的签名是

glShaderSource(GLuint shader, GLuint count, const GLchar** string, const GLint *length)
Run Code Online (Sandbox Code Playgroud)

这有效:

int len = [shaderSource length];
const char *cstr = [shaderSource UTF8String];
glShaderSource(shader, 1, &cstr, &len);
Run Code Online (Sandbox Code Playgroud)

这不起作用:

glShaderSource(shader, 1, &[shaderSource UTF8String], &[shaderSource length]);
Run Code Online (Sandbox Code Playgroud)

我在这里显然不了解客观方面的问题,我想纠正这个问题,所以如果你这么倾向,请祈祷告诉,WTF?

syntax pointers objective-c ios

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

方法定义中的C++模板参数

是否需要使用该参数声明具有模板参数的类中的所有方法声明?编译器似乎需要类似以下内容

// Queue.h
template <class ItemType>
class Queue
{
    Queue();
    ItemType dequeue();
    int count();
    /* ... other methods ... */
};
// Queue.cpp
template <class ItemType>
Queue<ItemType>::Queue()
{ /*...*/ }
template <class ItemType>
int Queue<ItemType>::count()
{/*...*/}
template <class ItemType>
ItemType Queue<ItemType>::dequeue()
{/* ... */}
Run Code Online (Sandbox Code Playgroud)

来自Java/C#,这似乎有点多余 - 我觉得我应该能够更像这样定义方法:

int Queue::count() 
Run Code Online (Sandbox Code Playgroud)

签名不引用ItemType,因此我们可以省略它.

Queue::ItemType Queue::dequeue() 
Run Code Online (Sandbox Code Playgroud)

签名引用了ItemType,但编译器知道我们正在讨论模板参数,因为我们用标识符限定了标识符 Queue::

c++ templates

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