为什么方法定义返回符号?

乔·卡特勒

定义方法时,它将返回与该方法同名的符号。这有什么意义吗?还是只是作为您创建它的验证而已?

像这样:

def something
   ...
end
# => :something
约格午间

IRb始终显示调用inspect最后一个求值表达式的值的结果。该表达式是文字表达式,条件表达式,消息发送,类定义表达式还是方法定义表达式都无关紧要。

一切都在Ruby中返回一个值,即一切都是一个表达式,而在Ruby中没有语句。

过去,方法定义表达式的返回值是不确定的。大多数Ruby实现只是nil从方法定义表达式中返回,但是例如Rubinius返回了CompiledMethod所定义方法对象。

在Ruby 2.1中,方法定义表达式的返回值被标准化为Symbol对应于方法名称这样,您就可以将方法定义表达式用作需要方法名称作为参数的方法中的参数。

一些例子:

# Before Ruby 2.0:
def foo; end
private :foo

# After Ruby 2.0:
private def foo; end # similar for `protected`, `public`, `module_function`

# Before Ruby 2.0:
def map; end
alias_method :collect, :map

# After Ruby 2.0:
alias_method :collect, def map; end

就个人而言,我宁愿一个方法定义表达,以评估一个UnboundMethod对应于该方法的对象,方法,如publicprivateprotectedalias_methodmodule_function等应修正接受UnboundMethodS IN除了SymbolS和String秒。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

阅读类方法定义——什么是Callable?

为什么对此Java通用方法定义发出警告?

为什么在通过Java方法定义静态字段之前可以访问它?

为什么Rubocop默认指南在方法定义中建议使用括号?

为什么`each do`会在带注释的方法定义内引起语法错误?

Java方法定义中的“找不到符号”错误

为什么减法返回-符号

为什么,请求返回符号——'?'

JSON语法定义符号

乘法定义符号(C ++)

为什么在String类中将equals方法定义为equals(Object anObject)而不将其定义为equals(String anObject)?

为什么navigator.bluetooth无法定义?

为什么React无法定义'App'组件?

为什么在控制台上无法定义?

Java8:为什么禁止为java.lang.Object中的方法定义默认方法

将静态方法定义为当前类的返回实例

绑定库:返回未类型化的对象-方法定义

Java方法定义

为什么说“不能在用不同方法定义的内部类中引用非最终变量i”?

Java。如果在方法定义中参数是接口的类型,为什么要传递对象参数?

为什么不能将我的类方法定义为包含变量的索引实例数组?

为什么带符号整数的绝对值方法不返回无符号值?

以下方法定义的含义是什么?

方法定义名称开头的竖线字符会做什么

为什么模拟的axios get方法返回未定义的?

为什么Lodash _.find方法返回未定义?

为什么我的find方法返回未定义?

方法定义时的警告

用方法定义类