我有一个角色项目,我用打字稿写.这在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轻松调试它们.
我正在处理地理信息,最近我需要绘制一个椭圆.为了与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大得多,那么椭圆顶部的点数就是与椭圆左侧的点数相同.

这是浪费点的使用!在椭圆的上半部分添加一个点几乎不会影响多边形近似的精度,但在椭圆的左边部分添加一个点会产生重大影响.
我真正喜欢的是用多边形逼近椭圆的更好算法.我需要这个算法:
我想到的是找到一个多边形,其中每两条线之间的角度总是相同的 - 但不仅我不知道如何产生这样的多边形,我甚至不确定是否存在,甚至如果我删除限制!
有没有人知道如何找到这样的多边形?
我正在编写一个解析XML的clojure程序.作为其中的一部分,我希望基于clojure.xml/parse函数在XML文档中创建节点树.但是,我希望树是双向的 - 也就是说,每个节点都有一个子列表,以及指向其父节点的指针.只有一个问题:所有的数据是不变的,所以我不能一个指针"添加"到父不改变孩子,从而使母公司的指针没用.
我找到了这个答案:如何在没有额外间接的情况下在Clojure中创建循环(和不可变)数据结构?
解决方案建议似乎创建一个单独的索引映射,它引用内部的对象.对于更糟糕的解决方案来说,这似乎是一项巨大的工作.在构造过程中,树没有问题,但我无法弄清楚它是如何完成的.在clojure中真的没有办法获得循环指针吗?
谢谢!
我希望有几类draggables,每一类都对应一类droppables.但另外,我想要一个单独的"垃圾箱",可以放下所有可拖动物,直到可以找到合适的可放置物.
现在,使用accept函数可以轻松实现这一点.但是,我最多可以有20个班级,每个班级有30-40个可拖动/可放置.因此,如果我为此使用"接受"功能,那么当我拿起一个可拖动的时候,我的镀铬会冻结,因为它会对屏幕上的每个可丢弃的测试运行测试:(
如果我使用'scope'属性,这可以解决,因为它似乎使用了一些不同的方式.但是,当我使用示波器时,我似乎无法实现"垃圾箱"概念,因为它只能有一个示波器!
有没有办法绕过这个问题?给可拖动的多个范围,或给垃圾箱多个范围?或者也许是其他一些我想不到的解决方案?
javascript jquery jquery-ui jquery-ui-draggable jquery-ui-droppable
首先,我已经看过所有"睡眠"问题(例如什么是睡眠的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) 我写了以下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) 我注意到使用/// <reference path ="*.js">不起作用.我不明白为什么.
只是一个澄清:我知道d.ts文件,我知道通过创建它们来装饰js文件会增加什么值 - 它们允许我享受类型安全性,即使使用未使用打字稿编写的外部库也是如此.
我不明白的是,即使我愿意放弃类型安全,我还是要写一个d.ts文件.
例如,假设我有一个我编写的大型JS文件,其中包含许多函数定义.这些函数具有名称和参数列表.TS编译器不能自动"声明"这些函数以供使用吗?这将是一个临时解决方案,但它将有助于迁移到TypeScript这么多!
有没有理由我错过了这是不可能的,还是只是一个未实现的功能?
javascript ×3
typescript ×3
jquery ×2
c# ×1
clojure ×1
ellipse ×1
geometry ×1
immutability ×1
jquery-ui ×1
pointers ×1
polygon ×1
recursion ×1
sleep ×1