假设我在页面中插入了一个外部javascript,它将一些东西导出到外部作用域(即将它们绑定到窗口).
我想在我的打字稿项目中调用其中一些属性:
UndeclaredExportedProperty.aFunction()
Run Code Online (Sandbox Code Playgroud)
但是打字稿不允许我编译那个> <
我不想通过一种复杂的方式来声明模块的整个界面,因为我不知道它,坦率地说我并不关心它.它只是一个模块,我必须调用一次并"信任",当我调用它加载并包含正确的元素时(它非关键,所以不调用它不会让世界着火).
使用打字稿最简单的方法是什么?
编辑以响应标记为重复:
虽然这个问题的答案确实解决了我的问题,但问题是不同的(例如堆栈无法将其作为重复的建议)并且我觉得我正在尝试做什么Pokus的答案是更直接的一般解决方案而不是那个问题的答案
话虽这么说,如果管理员觉得这仍然是重复或简单的问题随时删除/关闭,因为我得到了我的答案.就个人而言,我会留下它,因为通过谷歌搜索的下一个人可能会更容易找到答案.
我喜欢 Pylance 类型检查。
但是,如果我有一个变量var: Union[None, T],在那里T实现foo,pylance 将在以下位置抛出错误:
var.foo()因为 typeNone没有实现foo.
有没有办法解决这个问题?一种告诉 Pylance 的方法“这个变量None有时是,但在这种情况下,我 100% 确定它会被分配
python-3.x visual-studio-code vscode-settings python-typing pylance
我觉得我应该在这个事实上加上我用sbt构建项目的事实.
我的问题是,如果在编译时一个方法返回一个无类型的东西,在我调用该方法的文件中,只要我使用类型推断,一切都会编译.一旦我尝试将未导入的类型分配给我使用函数的返回值创建的var/val,我就会遇到编译器错误.
假设我在两个包中有两个类.类App在包main和类Imported中包libraries.让我们进一步说,我们ImportedFactory在包main中有一个类,并且该类有一个方法来创建Imported类型的对象.
这段代码编译得很好:
class App() {
// method return object of type Imported
val imp = ImportedFactory.createImportedObject()
}
Run Code Online (Sandbox Code Playgroud)
这不是:
class App() {
// method return object of type Imported
val imp : Imported = ImportedFactory.createImportedObject()
}
Run Code Online (Sandbox Code Playgroud)
这又一次:
import libraries.Imported
class App() {
// method return object of type Imported
val imp : Imported = ImportedFactory.createImportedObject()
}
Run Code Online (Sandbox Code Playgroud)
这似乎是相当奇怪的行为.对于编译时带类型推断的语言来说这是正常的吗?由于我的无知,我还没有注意到go/C++中的语言?
两种有效方法中的一种(导入和显式类型与感染)有哪些优势/缺点?(当然,期望一个更明确,更冗长,另一个更短)
这是黑魔法还是Scala编译器以相当直接的方式完成这些推论?
我最近开始摆弄 akka 的 actor 和 http 模块。然而,我偶然发现了一个相当烦人的小怪癖,即创建单一演员。
下面是两个例子:
1)
我有一个内存缓存,我的服务非常小(它是一个应用程序),所以我真的很喜欢这个内存模型。我可以在 Map 中保存与用户相关的大多数信息(嗯,列表的映射,但仍然很容易推理结构),并且我没有得到 redis、geode 或 aerospike 的开销和复杂性。
唯一的问题是这个内存中的缓存可以被多个源修改,并且所述修改必须是同步的。我没有同步该结构的所有 3 个访问方法(例如,通过构建消息队列或实现锁),而是将结构及其访问方法包装到参与者中,构建消息队列,简单的接收->发送逻辑和如果规模扩大,将很容易用 DA actor 代替专用的内存数据库。
2)我有一个“服务”层,应该用于为各种作业调度参与者(访问数据库,访问内存缓存,使用数据进行计算并将结果传递给用户......等)。
将此服务层理解为某种“单例”,即某些功能的闭包,因为它不执行任何阻塞或 CPU/内存密集型操作,它只是简单地向下分配任务(例如,决定有多少个任务)。演员/线程/我们应该被创建以及请求应该去哪里)
然而,这件事需要:
a) 使两个对象成为单例参与者或
b) 使两个对象都成为实际的“对象”(如在 scala 对象表示法中指定单个命名单例,其函数在其范围内具有闭包)
b) 存在很多问题,即服务层必须将 Actor 系统“传递”给它(我不确定这是最佳实践),以便创建 Actor,而不是创建自己的 Actor “childrens” 它将使用全局参与者系统创建儿童,并且消息传递和监控逻辑将更加尴尬和不直观。另外,内存中的缓存不会具有内置消息队列的优势(我并不是说它很难实现,但这似乎是其中一种情况,人们会说“哦,高兴,这很好,我有演员,我不必花时间实现和测试此代码”)
a) 一般而言,似乎存在 akka 文档中记录不足且未建议的问题。我是说:
http://doc.akka.io/docs/akka/2.4/scala/cluster-singleton.html
看看这个狗屎,一半的文档警告不要使用它,它是它自己的依赖项,坦率地说,对于像我这样还没有涉足函数式和并发编程象牙塔的可怜的草皮来说,它很难阅读。
所以,嗯。你们中的任何人都可以向我解释为什么使用单例演员不好吗?如果他们不能成为演员,你如何设计单身人士?有没有什么方法可以设计出不会造成大量损坏的单例演员?整个“服务”模型是否具有“全局”服务,这些服务被调用而不是实例化“un akka like”?
假设我有如下函数:
print_sutff(const std::string stuff) {
std::cout << stuff;
}
Run Code Online (Sandbox Code Playgroud)
我可以接受:
std::string
std::string&
std::string&&
Run Code Online (Sandbox Code Playgroud)
对函数代码的外观没有任何影响.
但是,可以通过多种方式调用该函数,我希望通过它实现以下行为(或尽可能接近它):
auto pass = "a string";
print_sutff(pass);
Run Code Online (Sandbox Code Playgroud)
在这里用户不能使用&&,我更愿意&优先考虑lvaue
要么:
print_sutff("a string");
Run Code Online (Sandbox Code Playgroud)
这里应该调用&&构造函数.
所以我的问题是:
有没有办法让函数接受左值,&和&&?如果是这样,有没有办法根据被调用的上下文优先考虑使用哪一个?
如果没有,有没有办法让函数同时接受&和&&?这意味着使用哪个签名的行为是明确定义的.
我有以下代码:
fn main() {
let message = "Can't shoot yourself in the foot if you ain't got no gun";
let t1 = std::thread::spawn(|| {
println!("{}", message);
});
t1.join();
}
Run Code Online (Sandbox Code Playgroud)
rustc 给我编译错误:
闭包可能比当前函数存活时间更长,但它借用
message了当前函数所拥有的
这是错误的,因为:
它在这里所指的功能是(我相信)主要的。一旦 main 完成执行,线程将被杀死或进入 UB。
它所指的函数清楚地在所述线程上调用 .join() 。
以前的代码在任何方面都不安全吗?如果是这样,为什么?如果没有,我怎样才能让编译器理解这一点?
编辑:是的,我知道在这种情况下我可以只移动消息,我的问题是专门询问如何传递对它的引用(最好不必堆分配它,类似于此代码的执行方式:
std::thread([&message]() -> void {/* etc */});
Run Code Online (Sandbox Code Playgroud)
(只是为了澄清,我实际上试图做的是从两个线程访问线程安全的数据结构......不涉及使复制工作的问题的其他解决方案也会有所帮助)。
Edit2:这个被标记为重复的问题有 5 页长,因此我认为它本身就是无效的问题。
我有多个具有不同模式的输入源。为了使用 Clickhouse 进行一些分析,我想到了两种处理分析工作负载的方法,使用join或aggregation操作:
使用联接涉及定义与每个输入相对应的表。
使用聚合函数需要一个带有预定义列集的表,列数和列类型将基于我的近似值,并且将来可能会发生变化。
我的问题是:如果我采用第二种方法,定义很多列,比如说数百列。它如何影响性能、存储成本等?
看看Go的builtins函数,我只是意识到他们不使用接口而是使用魔术'Type'.
https://golang.org/src/builtin/builtin.go
那么如果不使用泛型,这究竟是多少呢?如何在没有接口的情况下编写一个带有类似于append(带任何类型的数组)的签名的函数?
scala ×2
actor ×1
akka ×1
akka-actor ×1
akka-http ×1
borrowing ×1
built-in ×1
c++ ×1
c++17 ×1
casting ×1
clickhouse ×1
database ×1
ecmascript-6 ×1
ecmascript-7 ×1
gcc ×1
generics ×1
go ×1
javascript ×1
jvm ×1
lambda ×1
pylance ×1
python-3.x ×1
rust ×1
templates ×1
types ×1
typescript ×1
webpack ×1