小编Ken*_*ite的帖子

解决圆形模块加载的最佳方法

我试图让两个不同的对象相互引用,并在属性上使用类型检查。当我这样做时,我得到Circular module loading detected trying to precompile. 谷歌搜索让我https://docs.raku.org/language/faq#Can_I_have_circular_dependencies_between_modules?其中指出:

请注意,Raku 没有“1 个文件 = 1 个类”的限制,单个编译单元(例如,文件)内的循环依赖可以通过存根实现。因此,另一种可能的解决方案是将类移动到同一个编译单元中。

如果可以避免的话,我宁愿不将两个类都放在同一个单元中。由于没有示例,我不确定如何使用存根来完成此操作。以下是我正在尝试做的一个小例子:

牦牛

unit class Yak;

use YakStore;

has YakStore $.yak-store is rw;
Run Code Online (Sandbox Code Playgroud)

YakStore.rakumod

unit class YakStore;

use Yak;

has Yak $.yak is rw;
Run Code Online (Sandbox Code Playgroud)

yak.rakutest

use lib '.';

use Test;

use Yak;
use YakStore;

plan 2;

my $yak-store = YakStore.new;

my $yak = Yak.new(:$yak-store);

$yak-store.yak = $yak;

isa-ok $yak-store.yak, Yak;
isa-ok $yak.yak-store, YakStore;
Run Code Online (Sandbox Code Playgroud)

是的,我知道,测试很蹩脚,但我只是想说明问题。谢谢!

circular-dependency raku

9
推荐指数
1
解决办法
115
查看次数

将 FutureProvider 合并到 StateNotifierProvider 中

我正在将 Riverpod 与 Freezed Union 一起使用。

我正在尝试合并/观察两个FutureProviders都返回相同类型的两个StateNotifierProvider并使用它们来设置状态。

我注意到,因为我正在观察两个 futureProviders,所以它创建了两个实例StateNotifierProvider......

从日志记录中我可以看到 init 方法被调用两次,clocking state被调用两次,DPS state被调用一次。

我在第一个障碍上失败了,但我的希望是:

  • 显示行程状态(兼作加载屏幕)
  • 获取DPS状态数据
  • 暂停10秒
  • 显示dps状态

我意识到下面的示例没有实现计时器,但我需要找出 StateNotfierProvider 的问题,然后我将继续添加暂停等。

老实说,我什至不确定这是正确的做事方式吗?

我考虑过也许为小部件中的每个未来提供者设置两个消费者,但这似乎有点麻烦。如果我可以在州立提供商中管理多个未来的提供商,那就太好了。

final clockingState = StateNotifierProvider<ClockingNotifier, ClockingState>(
    (ref) => ClockingNotifier(
        ref.watch(loadingItineraryProvider), ref.watch(clockingDps)));

class ClockingNotifier extends StateNotifier<ClockingState> {
  final AsyncValue<ClockingState> itineraryState;
  final AsyncValue<ClockingState> clockingDps;

  ClockingNotifier(this.itineraryState, this.clockingDps)
      : super(ClockingState.init()) {
    init();
  }

  void init() {
    logger.d("the init method");
    itineraryState.whenData((ClockingState clockingState) {
      logger.d("clocking state");
      state = clockingState;
    });
    clockingDps.whenData((ClockingState dps) { …
Run Code Online (Sandbox Code Playgroud)

flutter riverpod

9
推荐指数
1
解决办法
974
查看次数

如何以32位或64位配置以编程方式运行任何CPU .NET可执行文件?

我有一个C#应用程序,可以在32位和64位处理器上运行.我试图枚举给定系统上所有进程的模块,这在尝试从64位应用程序枚举32位进程模块时会出现问题; Windows或.NET禁止它.

我认为如果我可以从内部重新启动应用程序,但强制它以32位运行,然后它将正确枚举它在上次运行时遗漏的进程模块,那将是非常酷的.

如何以编程方式运行可执行文件并指示即使它是使用ANY CPU配置构建的,它也应该作为32位进程运行?

下面的代码抛出了一个System.ComponentModel.Win32Exception文本"32位进程无法访问64位进程的模块".

[DllImport("kernel32.dll", SetLastError = true, CallingConvention = CallingConvention.Winapi)]
[return: MarshalAs(UnmanagedType.Bool)]
private static extern bool IsWow64Process(
     [In] IntPtr hProcess,
     [Out] out bool lpSystemInfo);

private static void Main()
{
  Process[] processes = Process.GetProcesses();

  using (FileStream fileStream = new FileStream("ProcessModulesDump.dat", FileMode.Create, FileAccess.Write, FileShare.None))
  {
      using (GZipStream gzipStream = new GZipStream(fileStream, CompressionLevel.Optimal))
      {
          using (TextWriter writer = new StreamWriter(gzipStream))
          {
              foreach (Process process in processes)
              {
                  writer.WriteLine("{0} - {1}", process.Id, process.ProcessName);

                  //bool lpSystemInfo;
                  //if ((Environment.Is64BitProcess …
Run Code Online (Sandbox Code Playgroud)

.net c#

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

将组件添加到表单时,如何自动添加Delphi单元?

如果我TXMLDocument从IDE 添加表单,Xml.XMLDoc, Xml.xmldom, Xml.XMLIntf, Xml.Win.msxmldom则会自动添加单元(在保存/编译时),IDE如何知道添加这些单元.我理解为什么/如何XMLDoc添加(它包含TXMLDocument),但其他人呢.

另外,如果我将DOMVendor从MSXML更改为ADOM XML v4,Xml.adomxmldom则会自动添加(在下一次编译时).此时我可以删除Xml.Win.msxmldom而不会自动添加回来.IDE如何根据组件属性了解这一点?

我有两个理由提出这个问题,首先是好奇心,但其次我正在清理大量单位(数百个)的使用部分.该项目使用DevExpress,并为使用添加了大量额外文件 - 例如添加a TcxSpinEdit然后cxSpinEdit, cxGraphics, cxControls, cxLookAndFeels, cxLookAndFeelPainters, cxContainer, cxEdit, cxTextEdit, cxMaskEdit添加.我想最小化使用条款,其中控件已从表单中删除(但它们的单位仍然在使用中),因此需要了解更好地添加它们的过程.

delphi

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

Delphi中有没有办法为按钮事件分配匿名方法?

我想知道Delphi中是否有一种方法可以为表单控件事件分配匿名方法.

例如:

Button1.OnClick := procedure (Sender: TObject) begin ShowMessage('') end;
Run Code Online (Sandbox Code Playgroud)

当然这给了我一个错误

[dcc32错误] Control.Controller.pas(51):E2009不兼容的类型:'方法指针和常规程序'

这是因为该方法必须属于一个对象,但它不再是匿名的.

也许有一些解决方法

delphi events anonymous-function

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

使用sslvSSLv23时如何确定协商了哪个TLS/SSL协议?

我正在使用TIdSSLIOHandlerSocketOpenSSL打开TLS/SSL连接.我目前想要支持1.0到1.2.

我像这样初始化IOHandler.

TIdSSLIOHandlerSocketOpenSSL(FSocket.IOHandler).SSLOptions.SSLVersions := [sslvTLSv1_2,sslvTLSv1_1, sslvTLSv1];
Run Code Online (Sandbox Code Playgroud)

建立连接后,如何才能获得为连接协商的协议?(两者都用于确保客户端和测试服务器的配置是正确的,并最终用于统计目的).

SSLContext.Method在连接后检查过,但sslvSSLv23在连接后仍然显示.SSLContext.SSLVersions节目[sslvTLSv1_2,sslvTLSv1_1, sslvTLSv1].

那么我如何获得这些信息呢?

delphi indy indy10

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

AnnotationRetention.BINARY 的用例是什么?

根据Kotlin 语言规范,注释保留分为三种类型:

  • 源保留(可通过源处理工具访问);
  • 二进制保留(保留在编译工件中);
  • 运行时保留(在运行时可访问)。

查看 JVM 上 kotlin-stdlib 的 KDoc,我们得到以下内容:

public enum class AnnotationRetention {
    /** Annotation isn't stored in binary output */
    SOURCE,
    /** Annotation is stored in binary output, but invisible for reflection */
    BINARY,
    /** Annotation is stored in binary output and visible for reflection (default retention) */
    RUNTIME
}
Run Code Online (Sandbox Code Playgroud)

我可以理解SOURCE(可用于注释处理器检查)和RUNTIME(可用于使用反射检查)的用例,但我无法理解BINARY.

有人可以解释一下这种类型保留的用例吗?如果不需要的话我为什么要选择BINARY呢?SOURCERUNTIME

kotlin

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

预览设备未显示在预览中

struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
        ContentView()
            .previewDevice(PreviewDevice(rawValue: "iPhone 11"))
    }
}
Run Code Online (Sandbox Code Playgroud)

但是,该设备未在预览中显示。我xcrun simctl list devicetypes在终端中运行了“”,它确实显示了模拟器。这是正常行为还是我错过了什么。我的目标是展示该应用程序在 iPhone 分辨率下的外观。我正在使用 xCode 13。

在此输入图像描述

preview swiftui

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

如何向用户发送通知或消息?

我有一个在当前用户空间中运行的脚本,但在后台永久最小化。

它需要通过系统托盘或 Windows.UI.Notifications 机制(或类似的其他机制)发送通知。

在 Win11/Win10 上的 powershell 中这是如何完成的?

powershell

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

需要检查代码是否包含某些标识符

我将使用 Roslyn 动态编译和执行代码,如下例所示。我想确保代码不违反我的一些规则,例如:

  • 不使用反射
  • 不使用 HttpClient 或 WebClient
  • 不使用 System.IO 命名空间中的文件或目录类
  • 不使用源生成器
  • 不调用非托管代码

我将在以下代码中的何处插入我的规则/检查以及如何执行它们?

using Microsoft.CodeAnalysis;
using Microsoft.CodeAnalysis.CSharp;
using Microsoft.CodeAnalysis.CSharp.Syntax;
using Microsoft.CodeAnalysis.Emit;
using System.Reflection;
using System.Runtime.CompilerServices;

string code = @"using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using System.IO;

namespace Customization
{
    public class Script
    {
        public async Task<object?> RunAsync(object? data)
        {
            //The following should not be allowed
            File.Delete(@""C:\Temp\log.txt"");

            return await Task.FromResult(data);
        }
    }
}";

var compilation = Compile(code);
var bytes = Build(compilation);

Console.WriteLine("Done");

CSharpCompilation Compile(string code)
{
    SyntaxTree syntaxTree …
Run Code Online (Sandbox Code Playgroud)

c# runtime compilation roslyn .net-core

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