小编nia*_*hoo的帖子

将自定义JavaScript函数添加到方法调用链中的本机方法

我想知道是否有本地方式这样做:

Object.prototype.chain = function(f) { return f.call(this) }


function fun1() {
    doSomethingWithObject(this)
    return this
}

function fun2() {
    doSomethingElse(this)
    return this
}

someObject
    .method1('something')
    .method2()
    .chain(checkSomething() ? fun1 : fun2)
    .method3()
Run Code Online (Sandbox Code Playgroud)

但我不想改变原型Object.有没有办法在不修改Objects我使用的原型或其他构造函数的情况下执行此操作(并且不是开发人员)

编辑:

我觉得我没解释得很好,所以让我们添加一些细节:

我想做的是使用一些我没有定义的API.someObject使用可链接方法定义如下:

var someObject = {
    method1: function(val) {
        // do something
        return this
    },
    method2: function() {
        // do something
        return this
    },
    method3: function() {
        // do something
        return this
    }
}
Run Code Online (Sandbox Code Playgroud)

现在假设我无法更改此代码,因为此对象来自库,因此我不想这样做.然后,假设我想链接方法和一些自定义函数(请参阅我的第一个代码段)以获取更多不同的对象.最简单的chain方法是附加一个方法Object.prototype.

但我认为它可能导致未来的冲突.我正在寻找一种方法来做同样的事情而不触及原型.

javascript method-chaining

11
推荐指数
2
解决办法
1238
查看次数

如何防止AngularJS制作小写HTML属性

我试图用AngularJS渲染一些SVG,但我无法动态更改svg元素的视图框.

Angular呈现"viewbox"属性,但浏览器需要"viewBox"属性.结果是:

<svg height="151px" width="1366px" viewBox="{{ mapViewbox }}" viewbox="-183 425 1366 151">
Run Code Online (Sandbox Code Playgroud)

我怎样才能得到我期望的结果:

<svg height="151px" width="1366px" viewBox="-183 425 1366 151">
Run Code Online (Sandbox Code Playgroud)

谢谢.

svg angularjs

7
推荐指数
2
解决办法
4074
查看次数

在Haskell中哪一个被认为是更好的XOR

我想知道Haskell中最标准的方法是什么.

第一个明确指出我们需要两个参数(大多数时候).

第二个涉及id第二个子句中的函数call(),因此效率较低,因为在第一个实现中我们可以简单地返回第二个参数.

所以我倾向于认为第一个更好,应该是一个选择:更容易阅读和弄清楚它做什么[1],以及函数调用保存.

但我是Haskell的新手,也许编译器会优化这个额外的调用.

xor :: Bool -> Bool -> Bool

xor True x = not x
xor False x = x

xor True = not
xor False = id
Run Code Online (Sandbox Code Playgroud)

此外,我想知道我是否可以用False那里的通配符替换它们.

那么,Haskell的好习惯是什么呢?也许另一个实现?

[1]我们在那里省略它是一个众所周知的函数,让我们想象它是一个非平凡的函数.

谢谢

optimization haskell

7
推荐指数
2
解决办法
5370
查看次数

如何使用Elixir宏获取模块的完整生成代码

以下是Phoenix应用程序示例的路由器模块.我想宏注入函数看到模块的完整代码.

我尝试了类似的东西,Macro.to_string (Macro.expand (Code.string_to_quoted! File.read!("web/router.ex")), __ENV__)但它没有完全扩展宏.我怎么能递归扩展每个宏,即pipeline,plug,scope,pipe_throughget.

谢谢

defmodule HelloPhoenix.Router do
  use HelloPhoenix.Web, :router

  pipeline :browser do
    plug :accepts, ["html"]
    plug :fetch_session
    plug :fetch_flash
    plug :protect_from_forgery
    plug :put_secure_browser_headers
  end

  pipeline :api do
    plug :accepts, ["json"]
  end

  scope "/", HelloPhoenix do
    pipe_through :browser # Use the default browser stack

    get "/", PageController, :index
  end

end
Run Code Online (Sandbox Code Playgroud)

compilation metaprogramming elixir phoenix-framework

7
推荐指数
2
解决办法
875
查看次数

如何使用 Quarkus 实时重新加载运行单个测试

我们的测试套件需要 5 分钟才能运行(主要是因为我认为在每次测试之前都设置了 Kafka 容器)。

当运行mvn quarkus:dev和处理测试时,我不知道如何仅重新运行一个测试,即我正在处理的测试。

如果我的测试被破坏了,并且是唯一被破坏的,那也没关系。但是一旦它变成绿色,如果我更改测试代码,quarkus将不会再次运行它。如果我要进行重大更改,quarkus 将运行所有损坏的测试,并且我无法清楚地跟踪我正在进行的测试的结果。

我可以用来mvn verify运行单个测试,但是编译时间和应用程序启动时间使其变得太无聊并且破坏了思维流程。

我怎样才能告诉 quarkus 在运行时只运行一些特定的测试?

quarkus

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

对于erlang玩家服务器来说,membase是一个很好的持久层吗?

我的目标是创建一个玩家可以设置建筑物的浏览器游戏.

每栋建筑都有几个模块(发动机,办公室,生产线......).每个模块将一直运行一个或多个动作,例如用成分Y,Z创建2OO'项目X'.

游戏服务器将使用erlang进行设置:OTP应用程序作为服务器本身,氮气作为Web前端.我需要持久化数据.我在考虑以下问题:

当某人或某物与建筑物相互作用,或者代表某条生产线的计时器结束时,主管会产生gen_server(如果尚未生成),它会从数据库中加载建筑物的状态,因此gen_server可以回答"添加"等消息这个模块','开始这个动作','将这个生产存储到仓库','死'等等(

但是当建筑物在X秒或分钟内没有收到任何消息时,他将终止(由于gen_server超时功能)并将其当前状态丢弃回数据库.

因此,因为它将是一个(软)实时游戏,所以必须非常快速地设置gen_server.我认为membase是数据库,因为它已知具有非常好的响应时间.

我的问题是:当一个gen服务器正在运行时,他的状态会填充一些内存,并且这个状态也存在于membase处理的内存中,因此状态在内存中使用了两倍.这是一个糟糕的设计吗?

在我的情况下,membase是处理持久性的好方法吗?将mnesia用作更好的选择,还是其他什么?

我担心mnesia 2 Go(或4?)表格大小限制,因为我目前不知道我的gen_servers的平均状态大小(在这个例子中的建筑物,但也包括玩家,生产线,等等)我可能有一天比1名球员:)

谢谢

erlang persistence erlangweb membase

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

如何调试无法启动的 erlang 应用程序

如果我编写了一些 erlang 代码来构建一个监督树,然后使用以下命令在引导时启动应用程序,可能很难找出为什么它不起作用:

erl -s myapp -pa ebin ... ...
Run Code Online (Sandbox Code Playgroud)

(myapp 示例模块)

-module(myapp).
-export([start/0]).
start() -> application:start(myapp).
Run Code Online (Sandbox Code Playgroud)

假设我的应用程序启动了一个主管 myapp_sup。myapp_sup 轮流启动几个主管(假设 server_sup、database_sup、another_sup)。

这些主管将启动一些 gen_servers。

在某些时候,如果我的代码中有错误,我找不到它!

我在某个 gen_server 的 init 回调中写了一个对 somemodule:functionthatdoesntexists() 的调用。

所有 vm 说的是“init 在 do boot 中终止”,然后显示错误匹配的错误位置,精确文件和我的顶级模块 (myapp) 的行。

(不匹配,因为 ok = application:start(...) 将不匹配)。

我查看了 erl_crash.dump 文件,没有关于这个未定义函数的信息(但我在原子列表中找到了它)。

所以,我写了一些日志来大致查看错误在哪里,但是我必须手动启动我的 gen_servers 以获取正确的错误信息。

我错过了什么,我怎么能更快地弄清楚?

谢谢

debugging erlang erlang-otp erlang-shell

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

虚拟where子句会影响性能

WHERE 1=1如果您使用脚本(伪代码)编写此请求,会有什么影响:

sql = "SELECT f1,f2,f3 FROM t
       WHERE 1=1" ++ restOfTheClause
Run Code Online (Sandbox Code Playgroud)

在哪里restOfTheClause可以是与串联的字段名称/运算符/值的列表AND

restOfTheClause = [('f4','>',5), ('f5','IN(1,2,3)'), ('f10','=',1)].map(writeWherePart).join(' AND ')

编写WHERE 1=1允许编写更简单的代码,因为您不必检查自己restOfTheClause是否为空等。

此子句对性能有什么影响?有WHERE 1=1和根本没有where子句有什么区别?

我从事Oracle工作已有几个月了,我发现我不得不提出,WHERE 1=1但其他RDBMS接受了WHERE true。作为=运算符,在使用哑子句时oracle和其他RDBMS之间是否存在性能差异?

谢谢

sql performance

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

是否在Erlang中优化了别名函数

假设我有一个从模块导出的功能,但模块多次使用该功能.

所以我写了一个别名,因为我在编码时很懒.

-export([get_toolkit/0]).

get_toolkit() -> 
    ... code ... code ... 
    ... code ... code ... 
    ... code ... code ... 
    {ok, Thing}.

tk() -> get_toolkit().
Run Code Online (Sandbox Code Playgroud)

编译器是否优化了别名?

谢谢

compiler-construction erlang optimization

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

如何使用 d3js 定义带有间隔的比例

我有这些类别:

    var IMCcat = [
        {color:'#F43E3E',min:40,max:200,name:'obésité morbide ou massive'},
        {color:'#F4B4B4',min:35,max:40,name:'obésité sévère'},
        {color:'#FAE9CA',min:30,max:35,name:'obésité modérée'},
        {color:'#FFFFD4',min:25,max:30,name:'surpoids'},
        {color:'#E9FFDA',min:18.5,max:25,name:'corpulence normale'},
        {color:'#FFFFD4',min:16.5,max:18.5,name:'maigreur'},
        {color:'#F43E3E',min:0,max:16.5,name:'famine'}
    ];
Run Code Online (Sandbox Code Playgroud)

(这些是身体质量指数 (BMI),但在法语 (IMC))

如您所见,我的域从 0 到 200,但不同的类别具有不同的宽度。

我想用 d3 定义一个比例,域是 BMI 和范围,颜色。颜色是离散值,但域是连续的。

我需要为秤提供权重,并获得相对颜色。如果提供重量,我会得到包含颜色和名称的对象(以及最小和最大但无用),那就更好了。

如果你想尝试,这里是 BMI 函数:

    function BMI(weight) {
        return weight / (height * height);
    }
Run Code Online (Sandbox Code Playgroud)

由于范围重叠,我如何设置排除或包含最小值,而最大值相反?

谢谢

如果体重秤是体重指数,而不是体重,那也没关系。我会将我的比例包装在一个进行转换的函数中。

javascript d3.js

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