useEffect我理解和之间的区别,useLayoutEffect但我很好奇它是如何实现的。
我创建了这个沙箱,它显示了事情发生的顺序:
Log.js:
export default function Log(count, ref) {
console.log(`Synchronous ${count}: Ran after ${ref.current}`);
queueMicrotask(() =>
console.log(`Microtask ${count}: Ran after ${ref.current}`)
);
setImmediate(() => console.log(`Task ${count}: Ran after ${ref.current}`));
}
Run Code Online (Sandbox Code Playgroud)
App.scala:
import { forwardRef, useEffect, useLayoutEffect, useState } from "react";
import Log from "./Log";
const App = forwardRef((props, ref) => {
const [, setCount] = useState(0);
ref.current = "render";
Log(2, ref);
useLayoutEffect(() => {
ref.current = "useLayoutEffect";
});
Log(3, ref);
useEffect(() => { …Run Code Online (Sandbox Code Playgroud) 我的构建由一个根项目、子项目和其他元项目组成。子项目生成一个 JAR,而元项目用于其他东西,如打包等。
关于我这样做的原因,请参阅使用 SBT进行跨平台构建。现在假设这是正确的做法,但如果不是,请随时对该问题发表评论。
我希望能够做的是聚合我所有的子项目,如下所示:
lazy val root = (project in file(".")).
aggregate(subProjects: _*)
val subProjects = Seq(projectA, projectB)
lazy val projectA = project
lazy val projectB = project
Run Code Online (Sandbox Code Playgroud)
对于包装,我有类似的东西:
lazy val packaging = (project in file("packaging").
enablePlugins(JavaServerAppPackaging). // Using sbt-native-packager
settings(
libraryDependencies ++= Seq(projectA.projectID, projectB.projectID)
)
Run Code Online (Sandbox Code Playgroud)
现在在打包之前,我必须发布子项目:
sbt> publishLocal
Run Code Online (Sandbox Code Playgroud)
然后从这些已发布的工件中打包,我这样做:
sbt> packaging/universal:packageBin
Run Code Online (Sandbox Code Playgroud)
这一切都很好,但现在真正的问题是,我如何汇总特定任务?例如,我希望能够清理所有项目,包括打包项目。
我知道可以做相反的事情,请参阅禁用 sbt 自定义任务的聚合。
我对 sbt.Aggregation 有一些了解,但我无法理解它。
我的理想解决方案如下所示:
lazy val root = (project in file(".")).
aggregate(subProjects: _*).
settings(aggregatedTasks(metaTasks, metaProjects ): _*) …Run Code Online (Sandbox Code Playgroud) 我在某个存储库类上有一个返回a的方法CompletableFuture.完成这些期货的代码使用阻止的第三方库.我打算有一个单独的有限Executor,这个存储库类将用于进行这些阻塞调用.
这是一个例子:
public class PersonRepository {
private Executor executor = ...
public CompletableFuture<Void> create(Person person) {...}
public CompletableFuture<Boolean> delete(Person person) {...}
}
Run Code Online (Sandbox Code Playgroud)
我的应用程序的其余部分将组成这些未来,并对结果做一些其他事情.当被提供给这些其他功能thenAccept,thenCompose,whenComplete,等等,我不想让他们对运行Executor储备库.
另一个例子:
public CompletableFuture<?> replacePerson(Person person) {
final PersonRepository repo = getPersonRepository();
return repo.delete(person)
.thenAccept(existed -> {
if (existed) System.out.println("Person deleted"));
else System.out.println("Person did not exist"));
})
.thenCompose(unused -> {
System.out.println("Creating person");
return repo.create(person);
})
.whenComplete((unused, ex) -> {
if (ex != null) System.out.println("Creating person");
repo.close(); …Run Code Online (Sandbox Code Playgroud) 我正在尝试在 ScalaTest 中使用带有异步测试的夹具上下文对象。
简单地将两者结合起来的幼稚方法无法编译。例如:
import org.scalatest.AsyncWordSpec
import scala.collection.GenTraversableOnce
import scala.concurrent.{ExecutionContext, Future}
import scala.math.Numeric.IntIsIntegral
trait Adder[T] {
implicit def num: Numeric[T]
def add(number: T): Unit
def result: Future[T]
}
object Foo {
def doubleSum[T](adder: Adder[T], numbers: GenTraversableOnce[T])(implicit ec: ExecutionContext): Future[T] = {
numbers.foreach(adder.add)
val num = adder.num
import num._
adder.result.map(result => result + result)
}
}
class FooSpec extends AsyncWordSpec {
trait IntAdder {
val adder = new Adder[Int] {
override implicit val num = IntIsIntegral
private var …Run Code Online (Sandbox Code Playgroud) 在PowerShell中,调用cmdlet,函数,脚本文件或可操作程序时,使用点(.)和&符(&)有什么区别?
例如:
. foo.sh1
& foo.sh1
Run Code Online (Sandbox Code Playgroud)
有一个非常相似的问题已被错误地作为重复项关闭:调用PowerShell脚本块时,&符(&)和点(。)之间的差异。问题不同,并且关键字和搜索排名完全不同。在PowerShell管道中,“。”的简写是什么的答案?只能回答一半的问题。
我需要在 Python 中创建一个空数组并用循环方法填充它。
data1 = np.array([ra,dec,[]])
这是我所拥有的。ra 和 dec 部分来自我导入的另一个数组。我遇到的问题是填充其他列。例子。假设要填写第 3 列,我这样做:
for i in range (0,56):
data1[i,3] = 32
Run Code Online (Sandbox Code Playgroud)
我得到的错误是:
IndexError:上述代码示例中第二行的索引无效。
此外,当我检查我创建的数组的形状时,它会在(3,). 我已经输入的数据是两列,有 56 行数据。
那么我在哪里搞砸了?我应该转置数组吗?
我正在尝试使用JDK 11进行编译,但目标是IntelliJ中的Java 1.8。我已经配置:
我收到一堆编译错误,说内部软件包不存在。--add-exports无效,--target 1.8因此无济于事。
唯一起作用的是将Project SDK设置回Java 1.8(这在尝试与Java 11一起运行时会引起其他问题,但这是另一个问题)。
是否可以在IntelliJ中使用JDK 11进行编译并以Java 1.8为目标?
还有其他一些相关的问题似乎可以解决,但不适用于IntelliJ:
我正在尝试构建由Visual Studio 2003中编写的VC ++项目组成的应用程序的旧版本。
我的操作系统是Windows 7 Enterprise(64位)。当我尝试构建解决方案时,出现以下错误:
- 错误C4772:#import从缺少的类型库中引用了一个类型;“ __missing_type__”用作占位符
- 严重错误C1084:无法读取类型库文件:'Smegui.tlb':加载类型库/ DLL时出错。
他们俩都抱怨以下进口声明:
#import "Smegui.tlb" no_implementation
Run Code Online (Sandbox Code Playgroud)
这不是文件路径不正确的情况,因为重命名Smegui.tlb文件会导致编译器抛出另一个错误,指出它找不到库。
Smegui来自另一个依赖于此的应用程序。我以为也许我缺少dll,但没有Smegui.dll这样的东西。
我只知道.tlb文件是类型库,您可以使用tlbexp.exe或regasm.exe从程序集创建它们(后者也向COM注册该程序集)
还有一个Apache Ant构建脚本,该脚本使用自定义任务来调用devenv.com来构建项目。这与构建服务器最初用于构建应用程序的脚本相同。当我尝试运行它时,它会给我同样的错误。
对此最奇怪的是,我知道它应该可以正常工作,因为所有这些都是从Subversion刚签出的。我尝试了管理员与用户提升,VS与Ant构建,清理,发布的许多不同组合。
我已经成功构建了大约5次,但是构建似乎是不确定的。
如果有人能弄清楚这种tlb东西的工作原理或该错误可能意味着什么,我将不胜感激。
我正在尝试创建一个包装另一个函数的 PowerShell 函数。我希望我的函数采用可变数量的参数并将它们传递给包装的函数。有没有办法做到这一点?
具体来说,我想做的是这样的:
function MakeRequest() {
if ($session) {
$resp = Invoke-WebRequest -WebSession $session $args
} else {
$resp = Invoke-WebRequest -SessionVariable session $args
}
$resp
}
Run Code Online (Sandbox Code Playgroud) 我正在尝试解决如何防止重新启动管理器在我卸载应用程序时检测到需要重新启动.
我的应用程序有一个Windows服务,它使用本机DLL(Tanuki Wrapper)并创建另一个写入一些日志文件的进程(Java).我正在使用WiX Toolset,但我对MSI Installer本身更感兴趣.我一直在尝试使用Orca手动进行一些更改.作为参考,相关的WiX配置是(我省略了JAR等的其他一些组件):
<DirectoryRef Id="logs3327407xx">
<Component Guid="344ec345-bdd7-4c1d-801f-55ddf9e07735" Id="logs_wrapper_log88580873x">
<File DiskId="1" Id="fl_logs_wrapper_log88580873x" Name="wrapper.log" Source="logs\wrapper.log"/>
</Component>
</DirectoryRef>
<DirectoryRef Id="bin97543xxxx">
<Component Guid="67c93dd8-36ad-427f-9d79-64a07c719eea" Id="bin_wrapper_windows_x86_64_exe189026768">
<File DiskId="1" Id="fl_bin_wrapper_windows_x86_64_exe189026768" KeyPath="yes" Name="wrapper-windows-x86-64.exe" Source="bin\wrapper-windows-x86-64.exe"/>
<ServiceInstall Account="LocalSystem" Arguments="-s "..\conf\wrapper.conf" wrapper.console.flush=true" Description="My Example Service." DisplayName="My Service" ErrorControl="ignore" Id="srvc_i_bin_wrapper_windows_x86_64_exe189026768" Interactive="no" Name="MyService" Start="auto" Type="ownProcess" Vital="yes"/>
<ServiceControl Id="srvc_c_bin_wrapper_windows_x86_64_exe189026768" Name="MyService" Remove="uninstall" Start="install" Stop="both" Wait="yes"/>
</Component>
</DirectoryRef>
<DirectoryRef Id="bin_wrapper_native490235675">
<Component Guid="d7e4295a-1ce5-4dd2-aa92-230caac34247" Id="bin_wrapper_native_wrapper_windows_x86_64_dll156404367">
<File DiskId="1" Id="fl_bin_wrapper_native_wrapper_windows_x86_64_dll156404367" Name="wrapper-windows-x86-64.dll" Source="bin\wrapper\native\wrapper-windows-x86-64.dll"/>
</Component>
</DirectoryRef>
Run Code Online (Sandbox Code Playgroud)
我知道操作中有逻辑InstallValidate确定文件是否正在使用中.它将使用Restart Manager或基于MSIRESTARTMANAGERCONTROL属性的FilesInUse.
如果我使用重启管理器,则会打开对话框,说明需要重启.日志说:
MSI (s) (1C:7C) [12:27:14:679]: Doing …Run Code Online (Sandbox Code Playgroud) 我有一个旧版 Visual Studio 解决方案,其中包含多个项目(已升级到 Visual Studio 2013)。其中一个项目生成一个 COM DLL。然后,该 DLL 中的 TLB 通过 importlib 属性导入到另一个项目的 IDL 文件中。当 MIDL 编译器尝试编译依赖项目的 IDL 文件时,它会生成以下警告:
警告 MIDL2015:无法在 importlib 中加载 tlb
当我使用 TLB 文件的完整路径时,它可以工作。
我尝试添加 MIDL -> 附加包含目录属性的路径,但我认为这仅适用于 IDL、标头和 ACF 文件(/I 开关)。
我还尝试了“链接器”->“附加库目录”属性,但这也不起作用。
MIDL 在解析 importlib 属性时使用什么搜索路径?
我有一个已导入 IntelliJ IDEA 的 sbt 项目。该项目包括splain编译器插件,该插件在一些编译器消息中包含颜色代码。
在 IntelliJ IDEA 中编译时,不会解释这些颜色代码。我可以添加"-P:splain:color:false"到首选项中的附加编译器选项,该选项有效,但在刷新 sbt 项目时丢失。
有没有办法设置scalacOptionsin sbt 使其仅适用于 IntelliJ IDEA?
java ×2
powershell ×2
sbt ×2
arrays ×1
asynchronous ×1
c++ ×1
com ×1
dll ×1
java-11 ×1
java-8 ×1
midl ×1
numpy ×1
python ×1
react-hooks ×1
reactjs ×1
scala ×1
scalatest ×1
tlbimp ×1
typelib ×1
unit-testing ×1
visual-c++ ×1
wix ×1