小编Gil*_*ans的帖子

即使被引用,Typescript也找不到名称

我有一个角色项目,我用打字稿写.这在VS下很适合我,现在我在webstorm下尝试使用Node.JS.

我在progressor.ts文件中有一个进度类:

export class Progressor{
    public tasks: any;

    constructor(){
        this.tasks = {};
    }
    ...
}
Run Code Online (Sandbox Code Playgroud)

我有我的主控制器,它使用这个类:

/// <reference path="../progressor.ts" />

declare var angular: any; // I'm trying to eliminate these...
declare var Papa: any;
declare var $: any;

class MainController{
    constructor($scope: any){
        $scope.progressor = null;
        $scope.filesDropped = function(files, rejectedFiles){
            if(!files || !files.length)
                return;

            $scope.progressor = new Progressor();
            // ...
        }
    };
}
Run Code Online (Sandbox Code Playgroud)

请注意,这不是Node.JS代码 - 它只是Node.JS项目的一部分.

相对参考路径是正确的.当我尝试使用以下方法编译它时:

tsc mainController.ts --module amd --target es5
Run Code Online (Sandbox Code Playgroud)

我收到一个错误:找不到名称Progressor.

我不明白是什么问题......到目前为止,我的Node.JS项目一直没有问题,而且我正在考虑完全放弃TS用于这个项目.首先 - 任何人都可以告诉我为什么它不会编译?请注意,我希望每个TS文件都单独编译,因此我可以通过Chrome轻松调试它们.

typescript

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

用多边形逼近椭圆

我正在处理地理信息,最近我需要绘制一个椭圆.为了与OGC约定兼容,我不能原样使用椭圆; 相反,我使用多边形近似椭圆,通过采用椭圆包含的多边形并使用任意多个点.

我用于为给定数量的点N生成椭圆的过程如下(使用C#和虚构的Polygon类):

Polygon CreateEllipsePolygon(Coordinate center, double radiusX, double radiusY, int numberOfPoints)
{
    Polygon result = new Polygon();
    for (int i=0;i<numberOfPoints;i++)
    {
        double percentDone = ((double)i)/((double)numberOfPoints);
        double currentEllipseAngle = percentDone * 2 * Math.PI;
        Point newPoint = CalculatePointOnEllipseForAngle(currentEllipseAngle, center, radiusX, radiusY);
        result.Add(newPoint);
    }
    return result;
}
Run Code Online (Sandbox Code Playgroud)

到目前为止,这对我很有帮助,但我注意到它有一个问题:如果我的椭圆是'矮胖',也就是说,radiusX比radiusY大得多,那么椭圆顶部的点数就是与椭圆左侧的点数相同.

插图

这是浪费点的使用!在椭圆的上半部分添加一个点几乎不会影响多边形近似的精度,但在椭圆的左边部分添加一个点会产生重大影响.

我真正喜欢的是用多边形逼近椭圆的更好算法.我需要这个算法:

  • 它必须接受点数作为参数; 可以接受每个象限中的点数(我可以在"有问题"的位置迭代地添加点,但我需要很好地控制我使用的点数)
  • 它必须以椭圆为界
  • 它必须包含正上方,正下方,直线向左,直线到椭圆中心右侧的点
  • 它的面积应该尽可能接近椭圆的面积,当然优先考虑给定的点数(参见Jaan的答案 - 显然这个解决方案已经是最优的)
  • 多边形中的最小内角是最大的

我想到的是找到一个多边形,其中每两条线之间的角度总是相同的 - 但不仅我不知道如何产生这样的多边形,我甚至不确定是否存在,甚至如果我删除限制!

有没有人知道如何找到这样的多边形?

c# geometry polygon ellipse computational-geometry

15
推荐指数
2
解决办法
4149
查看次数

指针在clojure中循环

我正在编写一个解析XML的clojure程序.作为其中的一部分,我希望基于clojure.xml/parse函数在XML文档中创建节点树.但是,我希望树是双向的 - 也就是说,每个节点都有一个子列表,以及指向其父节点的指针.只有一个问题:所有的数据是不变的,所以我不能一个指针"添加"到父不改变孩子,从而使母公司的指针没用.

我找到了这个答案:如何在没有额外间接的情况下在Clojure中创建循环(和不可变)数据结构?

解决方案建议似乎创建一个单独的索引映射,它引用内部的对象.对于更糟糕的解决方案来说,这似乎是一项巨大的工作.在构造过程中,树没有问题,但我无法弄清楚它是如何完成的.在clojure中真的没有办法获得循环指针吗?

谢谢!

pointers clojure immutability data-structures

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

具有多个范围的JQuery UI Drag/Droppable?

我希望有几类draggables,每一类都对应一类droppables.但另外,我想要一个单独的"垃圾箱",可以放下所有可拖动物,直到可以找到合适的可放置物.

现在,使用accept函数可以轻松实现这一点.但是,我最多可以有20个班级,每个班级有30-40个可拖动/可放置.因此,如果我为此使用"接受"功能,那么当我拿起一个可拖动的时候,我的镀铬会冻结,因为它会对屏幕上的每个可丢弃的测试运行测试:(

如果我使用'scope'属性,这可以解决,因为它似乎使用了一些不同的方式.但是,当我使用示波器时,我似乎无法实现"垃圾箱"概念,因为它只能有一个示波器!

有没有办法绕过这个问题?给可拖动的多个范围,或给垃圾箱多个范围?或者也许是其他一些我想不到的解决方案?

javascript jquery jquery-ui jquery-ui-draggable jquery-ui-droppable

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

javascript中的睡眠功能 - 不使用递归

首先,我已经看过所有"睡眠"问题(例如什么是睡眠的JavaScript版本?)但我找不到可接受的解决方案.

我想为各种算法制作视觉教育工具.为了做到这一点,我正在使用带有jQuery的javascript来显示数据并很好地绘制它.为了启动它,我想做一个排序示例,其中一个数组被显示,洗牌,然后以一种视觉上令人愉悦的方式排序.所以我想要发生的是两个单元格突出显示(简单),可能交换(简单),然后在测试下一对(硬)之前有一个小延迟.

我知道javascript中没有明确的"睡眠"方法.但是,将代码重组为使用setTimeout意味着递归地重写我的所有算法,这是一个巨大的阻碍(尽管显然不是不可能).

作为示例问题,请查看冒泡排序示例:

function bubble_sort(arr){
    for(var i=0;i<arr.length;i++){
        for(var j=1;j<arr.length;j++){
            highlight(j-1);
            highlight(j);
            if(arr[j-1] > arr[j]){
                visible_swap(arr, j, j-1);
            }
            sleep(1000);
        }
    }
    exhibit_array(arr);
}
Run Code Online (Sandbox Code Playgroud)

这显然可以递归地重写以使用setTimeout,但是在我考虑的所有算法上这样做会花费大量时间.我错过了什么吗?是否存在一种"简单"的方式来实现实现并随意安排睡眠?

编辑:我找到了两个解决方案:一个漂亮的解决方案和一个兼容的解决方案.漂亮的只适用于firefox,我担心,并且使用了精彩的yield语义(这里有一些示例解释:https://developer.mozilla.org/en/New_in_JavaScript_1.7).这实际上完美地解决了我的问题,因此:

function bubble_sort(arr){
    for(var i=0;i<arr.length;i++){
        for(var j=1;j<arr.length;j++){
            highlight(j-1);
            highlight(j);
            if(arr[j-1] > arr[j]){
                visible_swap(arr, j, j-1);
            }
            yield true;
        }
    }
    yield false;
}
var bubble = bubble_sort(arr)
function gen(){
    if(bubble.next()){
        setTimeout(gen, 500);
    }
    else{
        alert("Done!");
    }
}
Run Code Online (Sandbox Code Playgroud)

这对我来说非常有用,但确实依赖于目前仅在firefox上支持的yield功能.请注意,要使其完全正常工作,您需要使用<script type ="text/javascript; version = 1.7">.然而,这是完美的.它本来可以用于无限的算法,如果需要的话,显示它们徒劳无功.

根据以下答案,我发现的第二个解决方案也有效:

function bubble_sort(arr){
    var …
Run Code Online (Sandbox Code Playgroud)

javascript recursion jquery sleep

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

打字稿为什么不使用"自我"技巧?

我写了以下TypeScript代码:

class Person {
    constructor(public firstname: string, public lastname:string){
}

public die(){
    this.lastname += " RIP";
}
Run Code Online (Sandbox Code Playgroud)

这编译为:

var Person = (function() {
    function Person(firstname, lastname) {
        this.firstname = firstname;
        this.lastname = lastname;
    }

    Person.prototype.die = function () {
        this.lastname += " RIP";
    };
    return Person;
})();
Run Code Online (Sandbox Code Playgroud)

这当然是一种有效的方法,但在以下情况下它不会按预期工作:

function run(delegate){
    delegate();
}

var person = new Person("guy", "dude");
run(person.die);
alert(person.lastname);
alert(lastname);
Run Code Online (Sandbox Code Playgroud)

这里预期的警报将是"dude RIP",然后是"undefined".但是,实际结果将是"dude"和"undefined RIP".这是因为这个参数在JS中很奇怪.

一个常见的解决方案是通过闭包使用自变量,并放弃原型机制,即

var Person = (function() {
    function Person(firstname, lastname) {
        var self = this;
        self.firstname = …
Run Code Online (Sandbox Code Playgroud)

javascript typescript

3
推荐指数
2
解决办法
716
查看次数

为什么类型脚本不支持引用javascript文件?

我注意到使用/// <reference path ="*.js">不起作用.我不明白为什么.

只是一个澄清:我知道d.ts文件,我知道通过创建它们来装饰js文件会增加什么值 - 它们允许我享受类型安全性,即使使用未使用打字稿编写的外部库也是如此.

我不明白的是,即使我愿意放弃类型安全,我还是要写一个d.ts文件.

例如,假设我有一个我编写的大型JS文件,其中包含许多函数定义.这些函数具有名称和参数列表.TS编译器不能自动"声明"这些函数以供使用吗?这将是一个临时解决方案,但它将有助于迁移到TypeScript这么多!

有没有理由我错过了这是不可能的,还是只是一个未实现的功能?

typescript

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