当前位置:网站首页 > Java基础 > 正文

程序员的hello world_JAVA维苏威

好吧,你可能在想“为什么 Haskell 开发人员会对 Elixir 感兴趣?” 或“世界上没有多少 Haskell 开发人员,所以本指南不会那么有用”,主要原因是我只想更多地谈论 elixir 以及与 Haskell 的异同,这与未来的使用无关 除了材料之外,Elixir 也是一门非常不错的语言,并且拥有一个充满活力的社区,可以激励社区为传播 Elixir 的词做出贡献。 还有“为什么不给 Elixir 程序员的 Haskell 语言有很多事情要做来传播语言并使社区变得更强大。

既然我正确地介绍了原因,让我们从基础开始:

Elixir是什么?

Elixir 是一种运行在 Erlang 虚拟机中的函数式语言,由原 plataformtech(被 nubank 收购)的 José Valim 创建,Elixir 也受到 Ruby 的极大启发(José Valim 曾是 rails 核心团队的成员), Clojure(Valim 决定应用宏来使语言具有可扩展性)和 Erlang(并发角色模型的风格更易于人类理解,并且 Erlang VM 的所有功能都是容错和自我修复的)。

最基本的

如果没有对函数的强调,这将不是一个正确的函数式语言介绍,让我们来尝尝 elixir 函数的语法:

defmodule Example do def hi() do IO.puts "Hello World" end endExample.hi()

为了能够在 Elixir 中使用模块函数,我需要首先创建一个模块(defmodule),然后定义我的函数(使用 def 关键字),并且要执行我只需要运行 Example.hi()(在 repl 并点击运行,它应该显示 hello world)。

如果您认为语法中有一些类似 c 的代码,您猜对了,这就是 Ruby 语言中我们必须打开和关闭块的灵感,但稍后我们将看到一些方法可以不将这些块全部键入。

Haskell 中的等价物

module Examplehi = print "Hello World"

匿名函数

与 Haskell 不同的是,Elixir 区分了模块函数和匿名函数,而在 Haskell 中两者在底层是平等的。

Haskell 中的示例

domath x = x + 3-- is equal to(\x -> x+3)example = do print $ map (domath) [4] -- outputs [7] print $ map (\x -> x+3) [4] -- outputs [7]

虽然 Elixir 中的等价性是不可能的:

defmodule MathMod do def do_math(x) do x+3 end def example() do IO.inspect Enum.map([4], do_math) end endMathMod.hi(4) # outputs 7 MathMod.example() # outputs an error because passing module functons as a parameter generates an error

为了能够将函数作为参数传递,我需要指定一个匿名函数,如下所示:

defmodule MathMod do def do_math(x) do x+3 end def example() do IO.inspect Enum.map([4], fn x -> x+3 end) end endMathMod.example() # outputs [7]

同样在函数之间的这种区别中,Elixir 没有自动柯里化,所以我们必须手动柯里化我们的函数,并且只能柯里化匿名函数:

anFunc = fn x -> fn y -> x+y end endIO.puts anFunc.(3).(4) # outputs 7

缩短我们的功能

正如我之前提到的,我们可以通过不编写一些 open-close 父级或代码块来节省一些时间:

defmodule MathMod do def do_math(x) do x+3 end end# is equal todefmodule MathMod do def do_math(x), do: x+3 end

并且:

defmodule MathMod do def example() do IO.inspect(Enum.map([4], fn x -> x+3 end)) end end# is equal todefmodule MathMod do def example, do: IO.inspect Enum.map([4], &(&1+3)) #notice that &1 # is an alias for the first parameter(the x) if our function had # more parameters the alias would be &2, &3...&n end

我认为对于 Elixir 的第一口,我们涵盖了很多东西,可能这不是最适合初学者的开始方式,但如果你熟悉 Haskell,我会尽量让它最熟悉,我不 不知道我是否会继续并将其变成一个系列,但我仍然希望以某种方式为您的学习之旅做出贡献。

谢谢阅读!

到此这篇程序员的hello world_JAVA维苏威的文章就介绍到这了,更多相关内容请继续浏览下面的相关推荐文章,希望大家都能在编程的领域有一番成就!

版权声明


相关文章:

  • 【粉丝福利社】《Effective Java》(文末送书-完结)2024-11-16 14:54:07
  • javac 编码_apple代码2024-11-16 14:54:07
  • eclipse-kepler_eclipse如何编译java项目2024-11-16 14:54:07
  • java程序员规划_程序员的成长课 pdf2024-11-16 14:54:07
  • ruby语言有什么用_java的基础知识2024-11-16 14:54:07
  • 后端框架有什么用_java后端框架有哪些2024-11-16 14:54:07
  • 如何快速打好Java基础?_如何快速打好java基础代码2024-11-16 14:54:07
  • 如何快速打好Java基础?_如何快速打好java基础代码2024-11-16 14:54:07
  • Java基础知识总结(超详细整理)_java基础知识汇总2024-11-16 14:54:07
  • 如何快速打好Java基础?_如何快速打好java基础代码2024-11-16 14:54:07
  • 全屏图片