小编Flu*_*ous的帖子

了解Haskell中的纯函数和副作用-putStrLn

最近,我开始学习Haskell,因为我想扩大我对函数式编程的了解,我必须说到目前为止我真的很喜欢它。我当前使用的资源是Pluralsight上的“ Haskell基础知识第1部分”课程。不幸的是,我在理解讲师关于以下代码的一句话时遇到了一些困难,希望你们能对此话题有所了解。

随附代码

helloWorld :: IO ()
helloWorld = putStrLn "Hello World"

main :: IO ()
main = do
    helloWorld
    helloWorld
    helloWorld
Run Code Online (Sandbox Code Playgroud)

报价单

如果您在一个do块中多次执行相同的IO操作,则它将多次运行。因此,此程序将字符串“ Hello World”输出三遍。本示例有助于说明这putStrLn不是具有副作用的功能。我们只调用putStrLn一次函数来定义helloWorld变量。如果putStrLn有打印字符串的副作用,它将只打印一次,并且helloWorld在主do-block中重复的变量将没有任何效果。

在大多数其他编程语言中,这样的程序只会打印一次“ Hello World”,因为在putStrLn调用函数时会进行打印。这种微妙的区别通常会使初学者不胜其烦,因此请仔细考虑一下,并确保您了解为什么该程序会打印“ Hello World”三遍,以及如果该putStrLn函数作为副作用打印时只打印一次。

我不明白的

对我来说,字符串“ Hello World”被打印三遍似乎是很自然的。我认为helloWorld变量(或函数?)是一种稍后调用的回调。我不明白的是,如果putStrLn产生副作用,它将导致字符串仅打印一次。或者为什么只用其他编程语言只打印一次。

假设在C#代码中,我想它看起来像这样:

C# (提琴)

using System;

public class Program
{
    public static void HelloWorld()
    {
        Console.WriteLine("Hello World");
    }

    public static void Main()
    {
        HelloWorld();
        HelloWorld();
        HelloWorld();
    }
} …
Run Code Online (Sandbox Code Playgroud)

haskell

9
推荐指数
2
解决办法
112
查看次数

Pandas - rank() 函数的替代方法,为列提供唯一的序数等级

目前我正在编写一个 Python 脚本,用于聚合来自多个 Excel 工作表的数据。我选择使用的模块是 Pandas,因为它的速度和 Excel 文件的易用性。该问题仅与 Pandas 的使用有关,我试图创建一个额外的列,该列包含组内唯一的、仅限整数的有序 等级。

我的 Python 和 Pandas 知识有限,因为我只是一个初学者。

目标

我正在尝试实现以下数据结构。排名前 10 的 AdWords 广告根据其在 Google 中的位置进行垂直排名。为了做到这一点,我需要在原始数据中创建一列(参见表 2 和 3),其中包含不包含重复值的仅整数排名。

表 1:我试图实现的数据结构

    device  , weeks   , rank_1   , rank_2   , rank_3   , rank_4   , rank_5
    mobile  , wk 1    , string   , string   , string   , string   , string 
    mobile  , wk 2    , string   , string   , string   , string   , string 
    computer, wk 1    , string   , string   , string …
Run Code Online (Sandbox Code Playgroud)

python ranking ordinal rank pandas

6
推荐指数
1
解决办法
1万
查看次数

Scaffold-DbContext(EF核心工具)引发“实例故障”异常

语境

当前,我正在使用.NET Core创建用C#编写的提取,转换和加载(ETL)应用程序。ETL应用程序的目标是通过Entity Framework Core 2.1.0和更高版本2.1.1访问的数据库。由于模式是固定的,因此使用数据库优先方法。Microsoft提供了以下指南来解决这种情况。该指南指出,Scaffold-DbContextPackage Manager控制台中的CLI命令可用于生成DbContext和相应的实体模型。

在此项目的早期,我已经成功使用了此CLI命令。但是,模型的命名并不直接对应于表名和列名。此CLI工具的较新版本提供了一个option -UseDatabaseNames,因此我选择重新运行此命令以生成一些更新的模型。另外,我计划在将来重新生成DbContext。

问题

不幸的是,运行Scaffold-DbContext命令现在返回以下错误:Instance failure.。详细选项使您可以更深入地了解出了什么问题,但是我不清楚到底出了什么问题以及如何解决。

命令

Scaffold-DbContext "[ConnectionString]" Microsoft.EntityFrameworkCore.SqlServer -UseDatabaseNames -OutputDir Models -v -force
Run Code Online (Sandbox Code Playgroud)

详细输出

Using project '[ProjectName]'.
Using startup project '[ProjectName]'.
Build started...
Build succeeded.
C:\Program Files\dotnet\dotnet.exe exec --depsfile C:\Repos\[Client]\[ProjectName]\[ProjectName]\[ProjectName].Service\bin\Debug\netcoreapp2.1\[ProjectName].Service.deps.json --additionalprobingpath C:\Users\[MyComputerUsername]\.nuget\packages --additionalprobingpath "C:\Program Files\dotnet\sdk\NuGetFallbackFolder" --runtimeconfig C:\Repos\[Client]\[ProjectName]\[ProjectName]\[ProjectName].Service\bin\Debug\netcoreapp2.1\[ProjectName].Service.runtimeconfig.json C:\Users\[MyComputerUsername]\.nuget\packages\microsoft.entityframeworkcore.tools\2.1.1\tools\netcoreapp2.0\any\ef.dll dbcontext scaffold Server=[ConnectionString] Microsoft.EntityFrameworkCore.SqlServer --json --output-dir Models --use-database-names --force --verbose --no-color --prefix-output --assembly C:\Repos\[Client]\[ProjectName]\[ProjectName]\[ProjectName].Service\bin\Debug\netcoreapp2.1\[ProjectName].Service.dll --startup-assembly C:\Repos\[Client]\[ProjectName]\[ProjectName]\[ProjectName].Service\bin\Debug\netcoreapp2.1\[ProjectName].Service.dll --project-dir C:\Repos\[Client]\[ProjectName]\[ProjectName]\[ProjectName].Service\ --language C# --working-dir C:\Repos\[Client]\[ProjectName]\[ProjectName] --root-namespace [ProjectName].Service
Using …
Run Code Online (Sandbox Code Playgroud)

ef-database-first .net-core entity-framework-core-migrations entity-framework-core-2.1 ef-core-2.1

2
推荐指数
3
解决办法
4301
查看次数