[Elixir005] 查看指定数据的详细信息 i helper

#查看变量描述
iex(1)> i {:test, "That sounds great"}
Term
{:test, "That sounds great"}
Data type
Tuple
Reference modules
Tuple
#查看Module描述(有点类似于Erlang的lists:module_info)
iex(2)> i List
Term
List
Data type
Atom
Module bytecode
usr/local/Cellar/elixir/1.2.0/bin/../lib/elixir/ebin/Elixir.List.beam
Source
private/tmp/elixir20160101-48495-1fg1arr/elixir-1.2.0/lib/elixir/lib/list.ex
Version
[322093417650371381585336045669056703278]
Compile time
2016-1-1 11:57:45
Compile options
[:debug_info]
Description
Use h(List) to access its documentation.
Call List.module_info() to access metadata.
Raw representation
:"Elixir.List"
Reference modules
Module, Atom
@doc """
Prints information about the given data type.
"""
def i(term) do
info = ["Term": inspect(term)] ++ IEx.Info.info(term) for {subject, info} <- info do
info = info |> to_string() |> String.strip() |> String.replace("\n", "\n ")
IO.puts IEx.color(:eval_result, to_string(subject))
IO.puts IEx.color(:eval_info, " #{info}")
end dont_display_result
end
defprotocol IEx.Info do
@fallback_to_any true @spec info(term) :: [{atom, String.t}]
def info(term)
end defimpl IEx.Info, for: Tuple do
def info(_tuple) do
["Data type": "Tuple",
"Reference modules": "Tuple"]
end
end
它是一个protocol,在这个文件中把elixir的基本类型都实现了一次,它会返回一个keyword list, 所以我们才能看到,那么如果我们试试自己定义?
iex(3)> defmodule User do
…(3)> defstruct name: "John", age: 25
…(3)> @type t :: %User{name: String.t, age: non_neg_integer}
…(3)> end
因为在info.ex中已处理struct的类型, 如果我们现在直接i的结果它是
iex(4)> i %User{}
Term
%User{age: 25, name: "John"}
Data type
User
Description
This is a struct. Structs are maps with a __struct__ key.
Reference modules
User, Map
接下来, 我们来自定义看看
iex(5)> defimpl IEx.Info, for: User do
…(5)> def info(item) do
…(5)> ["Data type": User, "Description": "The customer is god, pleasure they", "Reference": "blablabla..."]
…(5)> end
…(5)> end
iex(6)> i %User{}
Term
%User{age: 25, name: "John"}
Data type
Elixir.User
Description
The customer is god, pleasure they
Reference
blablabla...
成功!
官方文档: http://elixir-lang.org/docs/stable/iex/IEx.Helpers.html#i/1
彩蛋:
有没有看到我们输入i得到的结果,只是把格式用有颜色的格式打印出来,但是确没有看到返回值被打印出来。。。
它的结果无论如何都打印不出来滴。因为它调用了
IEx.dont_display_result
在 evaluator.ex 里面:
unless result == IEx.dont_display_result, do: io_inspect(result)
if my fingers were erlang processes

[Elixir005] 查看指定数据的详细信息 i helper的更多相关文章
- asp.net/wingtip/显示数据和详细信息
前边我们的工作处于wingtip工程基础建设阶段,先是建立了“数据访问层”,然后设计建设了“UI和导航”的框架,接下来要充实工程的内容,显示“数据和详细信息”. 一. 添加数据控件(Data Cont ...
- 操作系统复习——如何查看一个进程的详细信息,如何追踪一个进程的执行过程 ,如何在 Linux 系统下查看 CPU、内存、磁盘、IO、网卡情况?epoll和select区别?
1. 如何查看一个进程的详细信息,如何追踪一个进程的执行过程 通过pstree命令(根据pid)进行查询进程内部当前运行了多少线程:# pstree -p 19135(进程号) 使用top命令查看(可 ...
- 使用tcpdump查看HTTP请求响应 详细信息 数据
安装tcpdump: sudo yum install tcpdump 查看get请求: tcpdump -s 0 -A 'tcp dst port 80 and tcp[((tcp[12:1] &a ...
- 【数据库】】MySQL之desc查看表结构的详细信息
在mysql中如果想要查看表的定义的话:有如下方式可供选择 1.show create table 语句: show create table table_name; 2.desc table_nam ...
- MySQL之desc查看表结构的详细信息
在mysql中如果想要查看表的定义的话:有如下方式可供选择 1.show create table 语句: show create table table_name; 2.desc table_nam ...
- Python查看模块函数,查看函数方法的详细信息
Python查看方法的详情 1.通用的帮助函数help() 使用help()函数来查看函数的帮助信息. 如: import requests help(requests) 会有类似如下输出: 2.查询 ...
- 查看mssql死锁的详细信息(存储过程)
CREATE procedure [dbo].[sp_who_lock]asbegindeclare @spid int,@bl int, @intTransactionCountOn ...
- docker查看容器元数据、详细信息,查看容器挂载的目录
通过 docker inspect 175f 查看容器元数据 我们启动docker的时候会挂载目录,但是挂载之后 后面就忘了 如何查看挂载的目录位置呢 可以通过 docker inspect a7a6 ...
- linux下如何查看某个容器的详细信息?
答: 使用docker inspect <CONTAINER ID>即可
随机推荐
- 01:zabbix监控redis
一.zabbix 自动发现并监控redis多实例 1.1 编写脚本 1.1.1 redis_low_discovery.sh 用于发现redis多实例 [root@redis02 homed]# ca ...
- 2018 Multi-University Training Contest 6-oval-and-rectangle(hdu 6362)-题解
一.题意 求椭圆内接矩形周长的期望. 二.推导过程 已知$c$,容易得出矩形弦长$d=4a\sqrt{1-\frac{c^2}{b^2}}$ 接下来,矩形周长$p=4c+d=4c+4a\sqrt{1- ...
- iOS - Properties 入门
iOS中,类的属性property可以有若干个修饰词,对应不同的属性行为. @property (readonly) NSString *readonly; // 只读,不可修改 @property ...
- ES6系列_14之promise对象的简单使用
1.产生原因 在前端开发中,最常见的的就是"回调",我相信很多人对于这个"回调"可谓是印象深刻呢.究其原因是因为层层回调会造成所谓的“回调地狱 (callbac ...
- linux 完全卸载mysql数据库
a)查看系统中是否以rpm包安装的mysql [root@linux ~]# rpm -qa | grep -i mysql MySQL-server-5.1.49-1.glibc23 MySQL-c ...
- leetcode441
public class Solution { public int ArrangeCoins(int n) { //convert int to long to prevent integer ov ...
- URL的名称设置
1. 对于login.html 此为跳转文件, 加入了参数nid,在views.py中进行关于request.POST.get()的文件中获取 <a href='/detail?nid={{k} ...
- 【转】TCP、UDP数据包大小的限制
来自:https://blog.csdn.net/caoshangpa/article/details/51530685 1.概述 首先要看TCP/IP协议,涉及到四层:链路层,网络层,传输层,应用层 ...
- U3D SCENEMANAGER.LOADSCENE是半异步的
作地图加载优化时用到了SceneManager.LoadScene,发现它执行后立即执行了后面的语句,查文档才知道 它是 semi-asyncronize的,即半异步的. 说它是半异步,是因为,它本身 ...
- leetcode 13 Roman to Integer 罗马数组转整型
描述: 将一个字符串表示的罗马数字转为整数,范围0~3999 解决: 如果后一个比前一个大,则表示减,没什么技巧. map<}, {}, {}, {}, {}, {}, {}}; int rom ...