def a def c 'hello,world' end end p a
这段代码返回的结果是 :c 请问这是什么意思?
为什么返回的不是 'hello,world' ? 以及 c 前面的“ :”是什么意思? (刚开始学习 ruby,新手提问,尝试了搜索,找不到相关知识点)
:c 表示方法名。意思就是你在方法 a 里面定义了方法:c。一个方法通过def关键字定义之后会返回这个方法的方法名。 :c 表示中的:表示 Ruby 里面的一种数据类型Symbol。你可以通过这样去看它
def
Symbol
> p a.class Symbol => Symbol
你看 def a 这个方法定义的主体,是不是 def c .. end 这一整块?
def a
def c
end
把这一整块看作一个表达式,那么 def c 这个表达式返回什么呢?
答案就是 符号c 表示为 :c
符号c
:c
项目中真有人这么用吗?
涉及到 2 个背景知识:
1.符号
符号 用 :xxx 来表示。符号用于 方法名、类名、常量。符号是一种特殊的数据类型,他唯一、检索速度快。所以被用于前者。想想是不是很合理?非常合理。为了性能。
:xxx
2.返回值
ruby 认为所有函数都应该有返回。即使是返回空,也是一种返回。所以除了 显示调用 return 返回值,默认没有 return 的情况下,返回方法内最后一个计算值。它相当于
def a return def c 'hello,world' end end
所以这里,函数内部被调用,没有 return 情况下,会返回 内部定义的函数名,函数名用符号表示,所以返回 :c
补充,想要运行里面的返回函数怎么办呢?
method(a()).call
可以用户 method 获得 :c 的函数主体,然后调用 call 调用它。
我理解 :c 其实就是 'c' 的简化版,因为 :c 是只读了,而且比 'c' 少很多 API。
多谢,get 了两个新知识点。
多谢
多谢解答 很清晰明了👍