首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

在Elixir中,为什么Kernel.put_ In /3是在Kernel模块而不是Map模块中定义的?

在Elixir中,Kernel.put_in/3是在Kernel模块而不是Map模块中定义的的原因如下:

  1. Kernel模块是Elixir的核心模块之一,其中包含了很多基本的语言操作和数据类型的函数。Kernel模块的目的是提供一组通用的函数,以方便在其他模块中使用。
  2. put_in/3函数的作用是更新一个嵌套的数据结构中的某个特定的值。这个函数的目的是提供一种方便的方式来更新嵌套数据结构,而不需要手动进行遍历和更新。
  3. 在Elixir中,Map是一种常用的数据结构,用于存储键值对。在Map模块中,提供了一系列与Map相关的函数,如Map.put/3用于更新Map中的值。然而,put_in/3函数的功能更为复杂,它可以用于更新嵌套的数据结构,不仅限于Map。因此,将put_in/3函数定义在Kernel模块中,更符合其通用性和功能的定位。
  4. 在Elixir中,Kernel模块中定义的函数可以直接在代码中使用,无需通过模块名进行限定。这样,使用put_in/3函数时可以更加简洁和方便,不需要额外的限定符。

总结来说,将put_in/3函数定义在Kernel模块而不是Map模块中,是为了提供一个通用且简洁的方式来更新嵌套数据结构,同时符合Elixir语言的设计原则和语法习惯。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

matplotlib mplot3d模块Ubuntu 10.04问题与解决方法

Ubuntu 10.04 系统上使用 matplotlib mplot3d 模块可能会遇到一些问题,主要涉及到库安装和版本兼容性。...问题背景一位用户使用mplot3d模块进行三维绘图时遇到问题。...用户正在使用matplotlib 0.99版本,mplot3d模块该版本存在一些问题。如果用户更新到matplotlib 1.0或更高版本,则这些问题应该可以得到解决。...解决方案二:第二个解决方案修改代码projection参数。matplotlib 1.0版本,如果要使用mplot3d模块,需要将projection参数值设置为“3d”。...他成功地使用mplot3d模块绘制了三维图形。 Ubuntu 10.04 上使用 matplotlib mplot3d 模块可能需要一些额外步骤和调试,特别是考虑到操作系统和软件包版本较老情况。

7110
  • HarmonyOS 开发实践——ArkTS,实现不在Enter模块中就可以创建定义弹窗

    官方文档,创建自定义弹窗比较麻烦,使用方式大概:1、使用@CustomDialog装饰定义组件作为弹窗布局2、@CustomDialog装饰定义组件必须声明CustomDialogControlle...类型变量3需要显示弹窗@Entry里面再次声明一个CustomDialogControlle类型变量,并完成初始化这样就可以通过@Entry里CustomDialogControlle类型变量进行控制弹窗关闭和打开...,通过添加export暴露出来,所以不一定要写在弹窗实现类里面,好处实现视图与控制层分离,坏处文件变多了import { BaseDialog } from '....} //隐藏加载弹窗 protected closeLoadingDialog() { this.loadingDialog.close() }}好了,现在你可以愉快定义更多弹窗了...还想要设置更多奇奇怪怪东西,可以查找promptAction.BaseDialogOptions属性,然后基类,找到下方截图中所示位置进行设置:写在最后如果你觉得这篇内容对你还蛮有帮助,我想邀请你帮我三个小忙

    14420

    【Android Gradle 插件】自定义 Gradle 插件模块 ④ ( META-INF 声明自定义插件核心类 | 应用依赖本地 Maven 仓库定义 Gradle 插件 )

    文章目录 一、META-INF 声明自定义插件核心类 二、应用依赖本地 Maven 仓库定义 Gradle 插件 Android Plugin DSL Reference 参考文档 :...Gradle 插件 - GitHub 地址 : https://github.com/han1202012/Android_UI 一、META-INF 声明自定义插件核心类 ---- 参考 Android...Gradle 插件内容 , 将 Android Studio Project 面板 External Libraries 展开 , Android Gradle 插件 , 需要在 META-INF...自己定义插件 , 也需要进行上述配置 ; " src/main " 目录下 , 创建 " resources\META-INF\gradle-plugins " 目录 , 该目录下创建...Maven 仓库定义 Gradle 插件 ---- 依赖本地 Maven 仓库 , 并导入 自定义 Gradle 插件 依赖 ; buildscript { repositories {

    1.5K10

    模块有关联放在一个文件夹 python2调用文件夹名会直接失败 python3调用会成功,但是调用不能成功解决方案

    模块有关联放在一个文件夹 python2调用文件夹名会直接失败 python3调用会成功,但是调用不能成功 解决办法: 该文件夹下加入空文件__init__.py python2会把该文件夹整体当成一个包.../或者类名也行] 再通过from . import 模块名 这样就可以调用包那些模块功能了 #如果导入这个模块方式 from 模块名 import * ,那么仅仅会导入__all__列表包含名字...__init__.py __all__ = ["sendmsg"] from . import sendmsg 3....6f64 756c 653e 0100 0000 7300 0000 00 我们还有一个文件名为infordisplay.py def test3(): print("-----infordisplay-test3...源码已给出 亲测有效 建议看此文同学都能多多尝试!!!祝各位工作顺利 合家幸福 学习更上一层楼

    1.7K50

    (译) Understanding Elixir Macros, Part 4 - Diving Deeper

    开始之前, 我要再提一次, 你应该仔细考虑你是否真的需要这样结构. 例如 deftraceable 这样宏引入了一个每个代码维护者都需要了解东西. 看着代码, 它背后发生不是显而易见....如果每个人都设计这样结构, 每个 Elixir 项目都会很快地变成自定义语言大锅汤....但是适合使用宏情况下, 你不应该仅仅因为有人声称宏不好, 就不使用它....__ENV__ 一个结构体, 每当你代码中使用它时, 它将在编译时扩展为适当值. 因此, 只要在代码写入 __ENV__.file. 文件生成字节码将包含包含文件名(二进制)字符串常量....基本上, 我从定义一个宏开始: defmacro deftraceable(arg1) do IO.inspect arg1 nil end 然后我尝试从一些测试模块或 shell 调用宏.

    10030

    elixir:灵丹妙药?or 徒有其名?

    扯远了,那时候把玩了一下Elixir,就像『七周七语言』那样,玩两周就算了,没有深入。唯一感觉:哇,BEAM [2] 上总算有一个让人好好写代码语言了 [3]。...两年多时光弹指过去,Elixir最近终于发布了1.0.x版本,Jose本人又频频上镜,到处布道Elixir,我才重新关注起这门语言。...IO.puts(formatted_output) 这样代码Elixir可以被写成: host |> Store.get_host |> to_map |> tabularize |> IO.puts...这不是object chaining么?老娘/老子Ruby里,或者jquery,经常这么写代码。。。 虽然pipe和chaining表述代码方式有些类似,但背后思想不太一样。...天生concurrency支持 这个就不多说了,Erlang基于actor并发模型,let it crash处理思想,supervision tree,error kernel,都是二十多年来与并发作斗争过程不断总结出来

    1.5K50

    (译) Understanding Elixir Macros, Part 1 Basics

    就我个人而言, 我觉得宏主题非常有趣, 本系列文章, 我将试图解释它们如何工作, 提供一些关于如何编写宏基本技巧和建议....defcall sum(x, y), do: reply(x+y) end 以上两个例子, 我们使用到了一些自定义宏, 这些宏会在编译时 (compile time) 都转化成其它代码....元编程总是会引入一个隐形 (或不明显)层, Elixir 这只发生在编译时, 并独立于程序各种执行路径....一旦我们拥有了字符串形式, 我们就可以生成并返回结果 AST 了, 这一步 quote do ... end 结构完成. 它结果用来替代原始 Tracer.trace(...)...启动 iex Shell, 复制粘贴上面定义 Tracer 模块: iex(1)> defmodule Tracer do ...

    18630

    (译) Understanding Elixir Macros, Part 3 - Getting into the AST

    让我们看一个关于函数调用例子: iex(3)> quote do div(5,4) end {:div, [context: Elixir, import: Kernel], [5, 4]} 这类似于...我不会在这里写出所有 AST 形状, 但会在 iex 尝试你感兴趣简单结构来探索 AST. 这是一个逆向工程, 但不是火箭科学....然后, quoted 代码, 我们通过分别计算左边和右边重新解释 == 操作(第 4 行和第 5 行), 然后整个结果(第 7 行)....我还引入(实际上, Elixir 源代码复制粘贴了)guard 语句指定了宏能处理运算符集(第 3 行). 这个检查有一个特殊原因....因此, 没有这些 guard 语句, 任何双参数函数调用都会在我们结束, 这可能我们不想要. 使用这个 guard 语句能将输入限制已知二进制运算符. 有趣事情发生在第 9 行.

    15250

    怎样学习新编程语言

    Elixir 说服自己 学习新编程语言最终目的解决实际问题。掌握编程语言过程,某种程度上近似学习一种新工程实践。...换种思维 在编写tree过程,我会时不时停下来思考Elixir某个功能点上应该怎么用才好?因为历史上,把Java代码写成C风格的人不在少数,这足以让人警惕。...Clojure中有keyword,如{:name "clojure"},Python并没有这样数据类型,我只好使用{'name': "python"},那么Elixir呢?...它推荐atom/symbol,%{:name => "elixir"} #or %{name: "elixir"} 遇到需要join path时候,凭借原来经验,我会去寻找Path模块。...重构 这里重构目的让程序更加贴近Elixir表达习惯,那么哪里不是很符合Elixir风格呢?我注意到了if...else,可以考虑模式匹配实现多态。

    93530

    (译) Understanding Elixir Macros, Part 6 - In-place Code Generation

    module 中生成代码 正如我第 1 章中提到那样, 宏并不是 Elixir 唯一元编程机制. 我们也可以模块中直接生成代码....这允许我们针对某些输入(本例关键字列表)进行元编程, 并生成代码, 而无需编写专门宏. 注意, 在上面的代码, 我们如何使用 unquote 将变量注入到函数子句定义....仅仅调用 def action 不够, 因为 def 宏接收到对 action unquoted, 不是变量 action 值....展开顺序 正如你所预料那般, 模块级代码(不是任何函数一部分代码)扩展阶段被执行. 有些令人意外, 这将发生在所有宏(除了 def)展开之后....bar # <- 由于 bind_quoted 可访问 end 代码注入 vs 数据传输 我们要面临另一个问题: 从宏传递到调用者上下文内容默认情况下注入, 不是传输.

    17840

    (译) Understanding Elixir Macros, Part 2 - Micro Theory

    为什么呢?因为宏有两个看似矛盾性质: 宏也是 Elixir 代码 宏在在最终字节码生成之前展开阶段运行 Elixir 代码如何在被生成之前运行?它不能....要调用一个宏, 其容器模块(宏定义所在模块)必须已经被编译. 因此, 要运行 Tracer 模块中所定义宏, 我们必须确认它已经被编译了....由于宏也是函数, Elixir 调用函数时可以省略括号, 所以我们可以这样写: Tracer.trace 1+2 这很可能 Elixir 之所以不在函数调用时要求括号最主要原因....因为宏代码, 您可以很容易地从关键字列表获取所需要选项, 不需要分析一些令人费解AST....理想情况下, 当我们这样做时, 我们不需要关心输入 AST 内容, 我们例子, 我们只需要在生成函数中注入函数体, 不需要关心函数体实际有什么. 测试这个宏很简单.

    13940

    Elixir和ScyllaDB教你创建CRUD CLI,惊人效率提升!

    另一方面,Elixir 一种编程语言,以很好地处理并发和容错等概念适用性闻名,这要归功于 Erlang 生态系统,在这种情况下,Elixir 使用名为 BEAM 虚拟机,专为与大容量消息传递应用程序配合使用而设计...定义我们连接模块将连接模块分离项目的单独区域中优雅且有趣,允许更实际维护和有吸引力组织,所以让我们创建两个带有路径目录lib/media_player/config。...创建文件后,我们现在可以创建两个特定函数,但为什么两个呢?...如果您想了解更多信息,请单击此处以更好地了解 Elixir 如何与模式匹配配合使用。命令好吧,现在期待已久时刻:我们应用程序添加负责执行命令函数!...索引;这次id我们没有提供歌曲歌曲名称,而是提供了一个手动索引(不是从 0 开始,而是从 1 开始,因此index + 1),用户将在其中键入(键入数字整数比 UUID 更实用,不是吗?

    45430

    BPF数据传递桥梁——BPF Map(一)

    /linux-bpf-learning/tree/master/bpf/bpf-maps 为什么需要BPF Map 通过消息传递来触发程序行为软件工程中广泛使用技术。...在内核空间程序创建BPF Map并返回对应文件描述符,在用户空间运行程序就可以通过这个文件描述符来访问并操作BPF Map,这就是为什么BPF MapBPF世界桥梁存在了。...定义了xdp_ip_tracker_common.h头文件,具体如下所示: 你可以基于自定义struct,实现灵活数据结构设计,比起之前使用bpf_trace_printk函数只能使用单一数据类型...腾讯云技术实现细节,就有通过IPVS模块向BPF Map插入数据逻辑,其关键代码如下所示: // https://github.com/Tencent/TencentOS-kernel/blob...然后IPVS模块创建新connection时,对上面conntrack_map插入了必要元素,关键代码如下所示: // https://github.com/Tencent/TencentOS-kernel

    4.4K30

    Linux形形色色接口API和ABI

    其他额外参数推入栈,返回值保存在RAX。[1] 可以说调用惯例(calling convention)就是ABI。因此,ABI和具体CPU架构和OS相关。...具体而言,ABI包含以下内容:[3] 1. 一个特定处理器指令集 2. 函数调用惯例 3. 系统调用方式 4. 可执行文件格式(ELF,PE) 那么,究竟我们为什么要纠结于ABI这个概念呢?...In-kernel API 内核API主要是内核中标记为 “EXPORT_SYMBOL”函数。这些函数主要是为了内核模块编写而提供。收到内核版本迭代影响,内核API并不稳定。...2.x版本内核模块可能在3.x版本上就无法使用。 ? 4. In-Kernel ABI 内核abi和linux abi定义类似,再次不再赘述。 5....Abstraction ABI 某些情况下,内核过于底层,开发者需要更高一层抽象。于是出现了类似Mesa 3D为图形驱动开发而生API。 ?

    4.2K41

    张亦鸣 : eBPF 简史 (下篇)

    map 对象 // 这里要注意好其实 map 需要由用户空间程序调用 bpf_create_map()进行创建 // 在这里定义 map 对象,实际上会在 load_bpf_file()解析 ELF...再见了汇编 利用高级语言书写 BPF 逻辑并经由编译器生成出伪代码来并不是什么新鲜尝试,比如 libpcap 就是代码内嵌了一个小型编译器来分析 tcpdump 传入 filter expression...BPF 程序类别以及 Map 机制 清单 3 我们看到 sockex1_kern.o 由 load_bpf_file()函数载入内存,但实际上 eBPF 提供用来将 BPF 代码载入内核正式接口函数其实是...深入对比清单 3(eBPF)和清单 2(cBPF)实现差异,还会发现一个比较明显不同之处:BPF 代码进内核之后,cBPF 和内核通讯方式 recv(); eBPF...定义了一系列宏,以方便使用 // 宏 struct 下还定义了相应函数,让开发者可以如 C++一般操作 map // 这里笔者定义了一个 array 类型 map,名为 my_map1 BPF_ARRAY

    6.3K00

    黄东升: Linux形形色色接口API和ABI

    具体而言,ABI包含以下内容:[3] 1. 一个特定处理器指令集 2. 函数调用惯例 3. 系统调用方式 4. 可执行文件格式(ELF,PE) 那么,究竟我们为什么要纠结于ABI这个概念呢?...In-kernel API 内核API主要是内核中标记为 “EXPORT_SYMBOL”函数。这些函数主要是为了内核模块编写而提供。收到内核版本迭代影响,内核API并不稳定。...2.x版本内核模块可能在3.x版本上就无法使用。 ? 4. In-Kernel ABI 内核abi和linux abi定义类似,再次不再赘述。 5....Abstraction ABI 某些情况下,内核过于底层,开发者需要更高一层抽象。于是出现了类似Mesa 3D为图形驱动开发而生API。 ?...[6] https://elixir.bootlin.com/linux/latest/source/kernel/sched/wait.c 内核API [7] https://stackoverflow.com

    1.2K20

    Elixir和OTP面向过程编程指南

    我们从一个定义开始:面向过程编程一种基于通信顺序过程范例,最初由Tony Hoare1977年一篇论文中发表。...Elixir / OTP和面向过程编程 Elixir / Erlang和OTP,通信原语执行语言虚拟机一部分。进程之间和机器之间通信能力建立语言系统中心。...Elixir或Erlang任何培训课程必须(通常是)包括OTP,并且应该从一开始就有一个过程方向,不是“现在你可以Elixir编写代码,所以让我们来做并发”类型方式。...避免从hello world编码示例开始培训,并只能到达OTP一半。 为什么选择Elixir / OTP和面向过程开发?...Elixir / OTP适用于长时间运行进程或需要多核性能进程。他们更注重低延迟,不是高吞吐量。它们对于要求单核吞吐量应用程序或者批处理或命令行环境不经常运行应用程序而言并不强大。

    1.4K10

    当我做 hackathon 时我在做什么 (2)

    2 基础上进一步封装,让每个域都有其 Elixir 语法。 3 基础上提供数据校验和足够清晰出错信息。...所以,我认为 deneb 实现到第 2 层至第 3封装和抽象就足够了。一来留给我时间不多了,二来我觉得过于厚重封装不是那么有必要,vega-lite 自己语法表现力足够且并不复杂。...我需要定义一个 Viewer,用于将 JSON 数据放入一段 javascript ,然后加载到 html 页面。我参考了 altair_viewer,实现得不费吹灰之力。...下图展示了 IPython Kernel 如何跟 Jupyter 通讯(这图审美,唉,要不是没时间自己画,我真不好意思放上来): ?...这也是为什么我在做 ExPolars 时, Jupyter notebook 里,一切操作都正常,因为那些输出都是简单 text;当我想输出 deneb 生成包含 vega-lite spec

    2K10
    领券