似乎在编写Typescript时如何实际构造代码的信息几乎不存在.
我想在节点中创建一个服务器.它有外部依赖,如socket.io.服务器太大了,无法将它全部放在一个文件中(正如我想象的那样大部分时间都是如此)所以我想我会将它拆分.我希望将每个类放在一个单独的文件中,我希望能够在整个项目中使用它们,而不需要像
import vector = require("vector.ts");
var vec = new vector.Vector();
Run Code Online (Sandbox Code Playgroud)
我怎么做?到目前为止,似乎我在两条战线上作战.当我得到tsc实际编译时,节点会在运行时抱怨,但是当我修改代码以便节点可以工作时,它就不会编译.
如果有人可以花时间一步一步地完成这项工作,我将不胜感激.
我有一个带参数和回调的函数.它应该向远程API发出请求并根据参数获取一些信息.当它获得信息时,它需要将其发送到回调.现在,远程API有时无法提供.我需要我的功能继续尝试,直到它设法做到这一点然后用正确的数据调用回调.
目前,我在函数内部有以下代码,但我认为像while(!done); 是不正确的节点代码.
var history = {};
while (true) {
var done = false;
var retry = true;
var req = https.request(options, function(res) {
var acc = "";
res.on("data", function(msg) {
acc += msg.toString("utf-8");
});
res.on("end", function() {
done = true;
history = JSON.parse(acc);
if (history.success) {
retry = false;
}
});
});
req.end();
while (!done);
if (!retry) break;
}
callback(history);
Run Code Online (Sandbox Code Playgroud)
我该怎么做正确的方法?
所以我想要一个不可变的Vector类.为此,我需要为x和y坐标以及私有setter设置公共getter,以便我可以在构造函数中实际初始化这些值.
我有一些选择,所以我想知道哪一个是按照惯例.
我可以这样做:
class Vector {
constructor(private _x: number, private _y: number) { }
public get x() {
return this._x;
}
public get y() {
return this._y;
}
}
Run Code Online (Sandbox Code Playgroud)
但我不知道使用下划线是否常见.这可能是一个问题,因为该名称将在intellisense中可见.
第二种选择可能是
class Vector {
constructor(private x: number, private y: number) { }
public get X() {
return this.x;
}
public get Y() {
return this.y;
}
}
Run Code Online (Sandbox Code Playgroud)
据我所知,只有类在JS中以大写字母开头,所以这也许是一个坏主意.
处理这个问题的首选方法是什么?
我设法构建了以下显示我的问题的"最小"示例.
如果启用了PatternSynonyms扩展
data Vec = Vec Int Int
pattern Ve x y = Vec x y
f :: (Vec, Vec) -> Vec
f (v@(Ve a b), Ve c d)
| a > b = Vec c d
| otherwise = v
Run Code Online (Sandbox Code Playgroud)
我得到了f函数的警告
Warning: Pattern match(es) are non-exhaustive
In an equation for `f': Patterns not matched: (_, _)
Run Code Online (Sandbox Code Playgroud)
如果我Ve用Vec它替换每一个都不会抱怨.我的奇异模式同义词如何干扰这里?
因此,在C a Bool形式上有类型类的许多优点.主要是因为它们允许你在两个约束之间进行任何逻辑操作,而正常C a只是隐式地对所有东西进行AND.
如果我们考虑~类约束,可以这样做
class Equal x y b | x y -> b
instance Equal x x True
instance False ~ b => Equal x y b
Run Code Online (Sandbox Code Playgroud)
但是,是什么让这种情况下,特别是,将x x在该实例的头就相当于x ~ y =>,然后x y在头上.任何其他类型类都不是这种情况.因此,如果我们尝试为类进行类似的操作,C我们会得到类似的东西
class C' x b | x -> b
instance C x => C' x True
instance False ~ Bool => C' x b
Run Code Online (Sandbox Code Playgroud)
不幸的是,这不起作用,因为只会挑选其中一个实例,因为它们不区分类型,x因此任何类型都匹配两个头.
我还阅读了https://www.haskell.org/haskellwiki/GHC/AdvancedOverlap,它再次不适用于任何类,C因为它要求您重写原始类的所有实例.理想情况下,我希望我的代码可以使用 …
我将首先介绍一个具体的问题(StackOverflow这样的人).假设您定义一个简单类型
data T a = T a
Run Code Online (Sandbox Code Playgroud)
这种类型是Functor,Applicative和Monad.忽略自动派生,要获得那些实例,你必须编写它们中的每一个,即使Monad暗示Applicative,这意味着Functor.更重要的是,我可以定义一个这样的类
class Wrapper f where
wrap :: a -> f a
unwrap :: f a -> a
Run Code Online (Sandbox Code Playgroud)
这是一个非常强大的条件,它绝对暗示Monad,但我不能写
instance Wrapper f => Monad f where
return = wrap
fa >>= f = f $ unwrap fa
Run Code Online (Sandbox Code Playgroud)
因为出于某种原因,这意味着"一切都是Monad(每一个f),只有它是一个Wrapper",而不是"一切Wrapper都是一个Monad".
同样,您无法定义Monad a => Applicative a和Applicative a => Functor a …
我对python很新,但我想通过制作游戏来学习它,而pygame似乎是最好的选择.由于PyPy是python的最快实现(我认为),我决定使用那个.但我不知道如何让这两个人一起工作.
我在窗户上.
如果有人愿意一步一步地告诉我我需要做什么,我会非常感激.
到目前为止,我已经安装(解压缩到文件夹)PyPy,将pypy.exe设置为打开.py文件的默认设置,安装Pygame并尝试运行其中一个示例.py文件.我在文件中的第一个导入行中收到"模块pygame not found"错误.
我正在寻找一种方法来做这样的事情.假设我们从1开始.对于每个数字奇数,我们将它+5添加到列表的末尾.对于每个偶数,我们将它添加+3,将+7添加到列表的末尾.列表看起来像这样
[1,6,9,13,14,18,17,21,21,25,......]
我如何在Haskell中做这样的事情?
我知道你可以列出一个列表,其中每个元素都依赖于前面的元素,但是当多个元素依赖于同一元素时你是如何做到的,除非你开始,否则你不知道哪个元素取决于哪个元素从最开始?
我一直在使用函数式编程已经有一段时间了,我觉得它很棒,所以我想教我的一些朋友Haskell.
不幸的是,我无法想到任何特定的代码片段来展示它们并说"看,这就是它看起来势在必行,看看功能有多好"
那么,那些比我更专业的人(这是一个非常低的要求)可以帮助我吗?
这似乎并不适合我,但如果是,请告诉我如何解决它.
我正在寻找一个编译器标志或类似的东西,它会自动将HasCallStack上下文添加到我的所有函数中.
我被建议启用性能分析以获得类似的效果,但我不想重新编译我的依赖项,而且只有我的应用程序中的函数被注释我才会完全没问题.
如果没有这样的旗帜,为什么?
haskell ×6
javascript ×2
typeclass ×2
typescript ×2
applicative ×1
functor ×1
ghc ×1
monads ×1
node.js ×1
pygame ×1
pypy ×1
python ×1