小编Ono*_*cci的帖子

满足此标准的语言?

我已经完成了一些Java编程和很少的C和PHP编程.最近我开始学习Python,因为语言似乎很有趣.

但SO上的几篇文章似乎指出Python不适合并发编程.与那些拥有编译器的语言相比,它也更慢.我也喜欢静态类型语言的优点,但Python是动态类型的.所以我的问题是,是否有一种语言符合以下标准.

1)有翻译(为了更快的发展)

2)有一个编译器(因为编译的代码运行得更快)

3)具有OO功能

4)静态打字

我遇到了满足上述标准的OCaml.但SO上的帖子让我相信OCaml不适合并发编程.所以第五个标准是

5)适合并发编程.

PS: - 我不是编程语言方面的专家,所以如果我上面的任何观察结果有误,请耐心等待.

python interpreter ocaml programming-languages static-typing

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

为什么对于正常递归函数成功执行的输入,尾递归函数失败?

根据MSDN文档,在编写递归函数时,使用accumulator参数使函数tail递归,从而节省了堆栈空间.我在MSDN网站上使用了两个例子来计算列表中所有数字的总和 -

首先没有尾递归 -

let rec Sum myList =
    match myList with
    | [] -> 0
    | h::t -> h + Sum t
Run Code Online (Sandbox Code Playgroud)

现在有尾递归 -

let Sumtail list =
    let rec loop list acc =
        match list with
        | h::t -> loop t acc + h
        | [] -> acc
    loop list 0
Run Code Online (Sandbox Code Playgroud)

并使用输入运行这两个函数[1..100000].函数Sum成功计算了此列表的总和,但是如果我通过[1..1000000] 但是第二个函数Sumtail 失败,则会给出stackoverflow异常,[1..100000]而它应该提供比第一个函数更好的性能,因为它使用尾递归.还有其他因素会影响递归函数吗?

f# tail-recursion

2
推荐指数
1
解决办法
174
查看次数

如何使用元组列表作为参数声明af#方法?

如何编写一个等于下面的c#代码的F#方法?试图谷歌它,但找不到任何工作.谢谢.

public List<Tuple<long, string, string>> Fun(List<Tuple<long, string>> param)
{
  var ret = new List<Tuple<long, string, string>>();

  foreach (var tuple in param)
  {
    ret.Add(new Tuple<long, string, string>(tuple.Item1, tuple.Item2, "new val"));
  }

  return ret;
}
Run Code Online (Sandbox Code Playgroud)

c# f# tuples c#-to-f#

2
推荐指数
1
解决办法
1326
查看次数

在elixir任务中获取用户输入

我正在尝试编写一个能够对用户输入做出反应的简单elixir程序.我的问题是从stdio读取似乎不起作用.如果我的整个想法很愚蠢,请告诉我一个如何完成的例子.我在网上找不到任何东西

我把问题简化为一个简单的例子:

t = Task.async((fn->IO.gets "what?" end))                
%Task{owner: #PID<0.65.0>, pid: #PID<0.80.0>, ref: #Reference<0.0.2.135>}
Run Code Online (Sandbox Code Playgroud)

任务开始:

iex(4)> pid=Map.get(t, :pid)
#PID<0.80.0>
iex(5)> Process.alive? pid                                       
true 
Run Code Online (Sandbox Code Playgroud)

并且它不会打印到stdio也不会读取.它没有正常退出或有异常.我也尝试过IO.read/2.

在我的程序中,Task以Task.spawn_link/1启动,但问题是相同的.IO.gets/2和IO.gets/2函数后面的代码没有执行.

主管开始任务:

defmodule Prime do
  use Application

    def start(_type, _args) do
       import Supervisor.Spec, warn: false

children = [
  # Define workers and child supervisors to be supervised
  worker(Task, [fn->Prime.IO.communicate(nil) end], restart: :transient),
  supervisor(Prime.Test.Supervisor, [])
]

opts = [strategy: :one_for_one, name: Prime.Supervisor]
Supervisor.start_link(children, opts) end end
Run Code Online (Sandbox Code Playgroud)

任务功能:

defmodule Prime.IO do

@doc """
    handles communication with the user and …
Run Code Online (Sandbox Code Playgroud)

io process task elixir

2
推荐指数
1
解决办法
1655
查看次数

为什么我需要使这个方法异步?

我有与此非常相似的代码(我稍微简化了代码以演示我试图弄清楚的行为的本质)。

public async System.Threading.Tasks.Task<bool> IsNumberOdd(int numToTest)
{
    if (numToTest % 2 == 0)
    {
        return false;
    }
    else
    {
        return true;
    }
}
Run Code Online (Sandbox Code Playgroud)

如果我不使用async关键字,我会收到关于无法将 abool转换为a 的抱怨Task<bool>。我假设这里涉及一些语法糖。查看 IL(我对 IL 不太熟悉)似乎 async 关键字导致任务运行,然后返回值是任务的结果。我理解正确吗?

顺便说一句,如果这是一个骗局,或者如果有一些博客文章讨论了这个问题,请随时指出并关闭它。我不是想给我的代表打气;我试图了解这段代码发生了什么。

编辑:


对于那些问“为什么这个方法是异步的?”的人——因为我试图构建一个小而简单的代码示例来演示这个问题。我还应该添加一个调用代码的示例,但我试图使代码尽可能小而简单。

c# asynchronous task-parallel-library async-await

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

二进制字符到易读字符串?

我对Elixir中的二进制文件和字符串感到困惑.我有一个功能.返回表示字符串的二进制字符代码,但我无法弄清楚如何以清晰的方式打印该字符串.我正在考虑将二进制文件转换为字符列表,然后枚举字符列表并将每个字符串转换为字符串,但这似乎很多工作.有没有更好的办法?

elixir

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

为什么不能删除带有波浪号的文件?

药剂1.3.2

Erlang / OTP 19

Windows 7(标准用户和管理员)

我正在尝试破解一个小的Elixir脚本,以将提交文件提交给git。为了确保我不会意外暂存emacs创建的临时文件,我要做的第一件事是File.rm(“ *〜”)。但是,这就是我得到的:

iex(2)> File.rm("*~")
{:error, :eio}
Run Code Online (Sandbox Code Playgroud)

所以我尝试了File.rm("*.*~")。结果相同。当我以标准用户身份(这是我通常在Windows上的工作方式)或以管理员身份运行时,我会得到相同的行为,因此似乎也没有任何权限。

因此,我将文件捕获到一个列表中。

iex(15)> {:ok,files} = File.ls
{:ok,
 [".git", ".gitattributes", ".gitignore", "add.factor", "async_ut",
  "async_ut.cs", "cng_maint", "codecvg.cmd", "codecvg_rkt.cmd",
  "codecvg_rkt.cmd~", "CreateBr.vbs", "DevSandbox", "distillery", "dk.cmd",
  "example.scm", "example.sql", "factor", "fsele", "fsharp", "glp.vbs",
  "lwwtww.org", "mrgmain.cmd", "MrgMain.vbs", "mrgtrunk.cmd", "mrgtrunk.cmd~",
Run Code Online (Sandbox Code Playgroud)

(为了节省空间而将其截短)

我可以检查包含列表中的字符串,~然后返回true。所以我没有想象波浪号在那里。

test.txt在目录中创建了一个临时文件。 File.rm删除了那一个就好了,所以似乎与~引起问题的原因有关。我也尝试了这些:

iex(7)> File.rm("*\~")
{:error, :eio}
iex(8)> File.rm("*\7F") #7F is hex code of ~
{:error, :eio}
Run Code Online (Sandbox Code Playgroud)

如您所见,没有运气。

:eio使用Elixir和File.rm 进行的任何搜索都没有发现任何有用的信息。我可以尝试安装1.4.0,看看是否有效果,但是我只是想看看我是否在这里缺少了一些愚蠢而明显的东西。

我在计算机上也安装了cygwin,因此尝试以这种方式删除文件。 rm *~完全按预期工作(在标准用户下)。 …

windows erlang file-io elixir

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

是否有内置的IEX命令来调用格式?

我检查了h和h(IEx)并且没有提出任何问题.

我相信我可以在命令提示符下运行并运行"混合格式",但我想知道我是否遗漏了一些东西.是否有任何类似于重新编译/ 0或r/1 for iex的命令允许我重新格式化项目中的源文件?

elixir iex

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

为什么我在此 Ecto 查询中收到未绑定的变量消息?

嘿,我正在尝试进行查询,我的代码如下所示:

  def show(conn, _params) do
user = Guardian.Plug.current_resource(conn)
team = Web.get_team!(user.team.id)

score_query =
  from(
    u in User,
    where: u.team.id == team.id,
    select: sum(u.score)
  )

team_score = Repo.all(score_query)

IO.puts("score")
IO.inspect(team_score)

conn |> render("team.json", team: team)
Run Code Online (Sandbox Code Playgroud)

当我尝试运行它时,我收到一条错误消息:

** (Ecto.Query.CompileError) unbound variable `team` in query
Run Code Online (Sandbox Code Playgroud)

但为什么是未绑定的?我该如何修复它以及为什么会发生这种情况?

phoenix elixir ecto

0
推荐指数
1
解决办法
1743
查看次数