小编Fra*_*ron的帖子

FSharpPlus divRem - 它是如何工作的?

看看FSharpPlus我正在考虑如何创建一个用于的泛型函数

let qr0  = divRem 7  3
let qr1  = divRem 7I 3I
let qr2  = divRem 7. 3.
Run Code Online (Sandbox Code Playgroud)

并提出了一个可能的(工作)解决方案

let inline divRem (D:^T) (d:^T): ^T * ^T = let q = D / d in q,  D - q * d
Run Code Online (Sandbox Code Playgroud)

然后我看了FSharpPlus如何实现它,我发现:

open System.Runtime.InteropServices

type Default6 = class end
type Default5 = class inherit Default6 end
type Default4 = class inherit Default5 end
type Default3 = class inherit Default4 end
type Default2 = class inherit Default3 end …
Run Code Online (Sandbox Code Playgroud)

generics f# constraints f#+

12
推荐指数
2
解决办法
410
查看次数

通用约束中的F#错误

以下F#代码

let f<'T when 'T: (member Id:int)> (t:'T) = t.Id

不接受以下错误:

错误FS0670此代码不够通用.^ T :(成员get_Id:^ T - > int)时的类型变量^ T无法一般化,因为它会逃避其范围.

怎么了?怎么解决?

编辑

@Fyodor:很棘手!我做了一些测试,发现更多的陌生感:

let inline f1<^T when ^T: (member Id:int)> (t:^T) = ( ^T: (member Id:int) t )

let inline f2<'T when 'T: (member Id:int)> (t:'T) = ( 'T: (member Id:int) t )

let inline f3<'T when 'T: (member Id:int)> (t:'T) = ( ^T: (member Id:int) t )

let inline f4 t = ( ^T: (member Id:int) t )
Run Code Online (Sandbox Code Playgroud)

f1在<^ T中给出错误 …

f# generic-constraints

7
推荐指数
1
解决办法
198
查看次数

在 AKS 中运行 ASP.NET 8 容器时的 HTTP_PORTS

在 ASP.NET 8 容器的日志中,我找到了此条目

[22:38:50 WRN] Overriding HTTP_PORTS '8080' and HTTPS_PORTS ''. Binding to values defined by URLS instead 'http://+:80'. # {"EventId": {"Id": 15}, "SourceContext": "Microsoft.AspNetCore.Hosting.Diagnostics"}
Run Code Online (Sandbox Code Playgroud)

我不明白 HTTP_PORTS 设置来自哪里,因为我能想到的配置源都没有设置它。

asp.net azure-aks .net-8.0

7
推荐指数
1
解决办法
1531
查看次数

从命令行构建的 Xamarin.Forms android 应用程序不起作用

我有一个 Xamarin.Forms Android 应用程序,使用 Visual Studio 2017 开发。如果我​​从 Visual Studio 运行/调试应用程序,使用 USB 设备,它运行良好(调试和发布配置)。

然后我使用 Visual Studio 中的存档命令创建 .apk。为了测试它,我只需从我的开发人员上传它。计算机到谷歌驱动器,然后从同一设备下载并安装它。这也有效。

当我尝试从命令行创建 .apk 时,问题就出现了。以这种方式获得的文件被设备识别,并正确安装它,但是当我启动应用程序时,它似乎启动但一秒钟后突然关闭。我什至没有得到我在开发阶段出现异常时遇到的熟悉的弹出窗口“不幸的是应用程序停止了”。

这些是我使用的命令:

msbuild /t:Clean /p:Configuration=Release

msbuild /t:PackageForAndroid /p:Configuration=Release

keytool -genkey -v -keystore SymCheck.keystore -alias SimCheck -keyalg RSA -keysize 2048 -validity 10000

jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore SymCheck.keystore my_application.apk SimCheck

根据https://docs.microsoft.com/en-gb/xamarin/android/deploy-test/signing/manually-signing-the-apk

我也试过这个序列

msbuild /t:Clean /p:Configuration=Release

msbuild /t:PackageForAndroid /p:Configuration=Release

keytool -genkey -v -keystore SymCheck.keystore -alias SimCheck -keyalg RSA -keysize 2048 -validity 10000

zipalign.exe -f -v 4 my_application.apk my_application_aligned.apk

apksigner.bat …

msbuild keytool jarsigner visual-studio xamarin.forms

5
推荐指数
1
解决办法
2715
查看次数

继承自F#生成类型提供者提供的类型

我有这个基本的生成F#类型提供者

[<TypeProvider>]
type MyTypeProvider(config : TypeProviderConfig) as this = 
    inherit TypeProviderForNamespaces(config)

    let ns = "MyNamespace"
    let asm = Assembly.LoadFrom(config.RuntimeAssembly)

    let buildTypes (typeName:string) (args:obj[]) =
        let asm = ProvidedAssembly()
        let srvName = args.[0] :?> string
        ... omitted
        let provided = ProvidedTypeDefinition(asm, ns, typeName, Some typeof<MyRuntimeType>, hideObjectMethods = true, nonNullable = true, isErased = false)
        let ctor = ProvidedConstructor([], (fun _ -> <@@ MyRuntimeType() @@>))
        provided.AddMember(ctor)
        provided
    let parameters = 
        [ ProvidedStaticParameter("Host", typeof<string>, "") ]

    let provider = ProvidedTypeDefinition(asm, ns, "MyProvider", Some …
Run Code Online (Sandbox Code Playgroud)

inheritance f# type-providers

5
推荐指数
0
解决办法
85
查看次数

Blazor javascript 互操作 - 从 js 到 .NET 的对象转换

我正在使用 Blazor javascript 互操作(js 调用 .NET),如下所示

//js
dotNetObjRef.invokeMethodAsync("DotNetMethod", jsObject);
---------------------------------------------------------
//C#
[JSInvokable]
public void DotNetMethod(object jsObject)
{
    Console.WriteLine($"jsObject type is {jsObject.GetType()}");
}
Run Code Online (Sandbox Code Playgroud)

在浏览器控制台中,我得到:

'jsObject type is SimpleJson.JsonObject'
Run Code Online (Sandbox Code Playgroud)

现在我想将 jsObject 转换为具体的 SimpleJson.JsonObject,如下所示

[JSInvokable]
public void DotNetMethod(object jsObject)
{
    JsonObject jsObject = (JsonObject)jsObject; //error
}
Run Code Online (Sandbox Code Playgroud)

但我使用 SimpleJson 的 C# 社区实现(如https://github.com/facebook-csharp-sdk/simple-json)的所有试验都失败,抱怨强制转换无效。

作为解决方法,我浏览字符串:

//js
dotNetObjRef.invokeMethodAsync("DotNetMethod", JSON.stringify(jsObject));
.
//C#
[JSInvokable]
public void DotNetMethod(string jsObjectJSON)
{
    JsonObject jsObject = SimpleJson.DeserializeObject<JsonObject>(jsObjectJSON);
}
Run Code Online (Sandbox Code Playgroud)

有谁知道是否可以(以及如何)直接使用接收到的 jsObject,即避免序列化/反序列化(并且不进行反射)?

.net javascript json interop blazor

5
推荐指数
1
解决办法
3806
查看次数

F#类型具有不寻常的结构特征

我有一个像这样定义的类类型:

type T1(?maybei1: int, ?maybei2: int) =
Run Code Online (Sandbox Code Playgroud)

以下所有工作:

let t11 = T1(1, 2)
let t12 = T1(1)
let t13 = T1()
Run Code Online (Sandbox Code Playgroud)

但这个没有(如预期的那样):

let tuple = (1, 2)
let t14 = T1 tuple //error: expected int but given int * int
Run Code Online (Sandbox Code Playgroud)

另一方面,如果我将我的类型定义为:

type T2(i1: int, i2: int) =
Run Code Online (Sandbox Code Playgroud)

然后我可以通过元组构造一个实例

let tuple = (1, 2)
let t24 = T2 tuple //ok
Run Code Online (Sandbox Code Playgroud)

但我失去了选择权:

let t22 = T2(1) //error
let t23 = T2() //error
Run Code Online (Sandbox Code Playgroud)

我尝试了一个额外的构造函数:

type T3(?maybei1: int, ?maybei2: int) =
    new (i1: int, …
Run Code Online (Sandbox Code Playgroud)

f#

4
推荐指数
1
解决办法
84
查看次数

当表单处于引导模式结束时,Blazor EditForm 提交处理程序未调用,提交按钮是模式解除命令

让我们考虑客户端 blazor 应用程序中的以下页面:

@page "/test"

<div id="modalDialog" class="modal" tabindex="-1" role="dialog">
    <div class="modal-dialog" role="document">
        <div class="modal-content">
            <div class="modal-body">
                <EditForm Model="@model" OnSubmit="@SubmitHandler">
                    <div class="form-group d-flex justify-content-between">
                        <label class="col-form-label col-3" for="editDT">Time</label>
                        <InputText bind-Value="@model" id="editDT" Class="form-control" />
                    </div>
                    <button type="submit" class="btn btn-primary" @*data-dismiss="modal"*@>Submit</button>
                </EditForm>
            </div>
        </div>
    </div>
</div>
<button data-toggle="modal" data-target="#modalDialog" class="btn btn-primary">Open</button>

@functions {
    private string model { get; set; } = "Model";
    private void SubmitHandler()
    {
        Console.WriteLine("Submit");
    }
}
Run Code Online (Sandbox Code Playgroud)

当我单击“打开”按钮时,模态会按预期显示。然后单击模式中的提交按钮,“提交”再次按预期打印在浏览器控制台中。但我还需要在单击“提交”时关闭模态,以便取消对数据关闭属性的注释。现在,模态按预期关闭,但不再调用 Submit 处理程序(浏览器控制台保持为空)。

1)这是预期的行为吗?

2)如果是,有没有办法在没有javascript互操作的情况下关闭提交处理程序中的模式?

3)如果没有,是否有另一种方法可以关闭模​​态并在单击提交按钮时调用提交处理程序,再次没有js互操作?

bootstrap-modal blazor

4
推荐指数
1
解决办法
3818
查看次数

续“在 F# 中是否有等效于 C# 的 nameof(..)?”

参考在 F# 中是否有等效于 C# 的 nameof(..)?

在以下情况下如何使用或扩展函数名称?

let nameof (q:Expr<_>) = 
    match q with 
    | Patterns.Let(_, _, DerivedPatterns.Lambdas(_, Patterns.Call(_, mi, _))) -> mi.Name
    | Patterns.PropertyGet(_, mi, _) -> mi.Name
    | DerivedPatterns.Lambdas(_, Patterns.Call(_, mi, _)) -> mi.Name
    | _ -> failwith "Unexpected format"

let any<'R> : 'R = failwith "!"

let s = _nameof <@ System.Char.IsControl @> //OK

type A<'a>() = 
    static member MethodWith2Pars(guid:Guid, str:string) = ""
    static member MethodWith2Pars(guid:Guid, ba:byte[]) = ""

let s1 = nameof <@ A<_>.MethodWith2Pars @> …
Run Code Online (Sandbox Code Playgroud)

f# nameof

4
推荐指数
1
解决办法
105
查看次数

在 Chrome devtools 控制台中运行 javascript fetch 时出错

根据这个文章,我应该能够从 Chrome devtools 控制台运行提取请求。事实上,如果我单击帖子答案中的按钮,它就会起作用。

但是,如果我尝试在控制台中执行完全相同的代码,则它不起作用。

fetch('https://jsonplaceholder.typicode.com/posts/1')
  .then(res => res.json())
  .then(console.log)
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

少了什么东西?

javascript google-chrome fetch google-chrome-devtools google-developers-console

4
推荐指数
1
解决办法
2051
查看次数