def test "Hello World" end p method(:test).call #"Hello World" p method("test").call #"Hello World"
我的问题是:当我们传递符号到调用方法时会发生什么?将ruby将符号转换为String,然后执行它吗?那么,那是什么目的呢?
如果没有,那么实际发生了什么呢?
请你详细说明一下
对不起,如果我不清楚自己.
解决方法
当您在任何明确的类或模块定义之外执行def test …时,您基本上处于Object类上下文中,因此测试现在是Object的实例方法
在irb …
1.8.7 :001 > def test 1.8.7 :002?> "Hello world" 1.8.7 :003?> end => nil 1.8.7 :004 > Object.instance_methods.sort => ["==","===","=~","__id__","__send__","class","clone","display","dup","enum_for","eql?","equal?","extend","freeze","frozen?","hash","id","inspect","instance_eval","instance_exec","instance_of?","instance_variable_defined?","instance_variable_get","instance_variable_set","instance_variables","is_a?","kind_of?","method","methods","nil?","object_id","private_methods","protected_methods","public_methods","respond_to?","send","singleton_methods","taint","tainted?","tap","test","to_a","to_enum","to_s","type","untaint"]
方法是Object类的一个实例方法,它基本上是所有的东西.当您调用任何显式类或模块定义之外的方法时,您本质上将其作为Object类的方法调用,该类本身就是Class的一个实例,它是Object的一个子类(对不起 – 我知道这是一个有点混乱).
所以 – 方法方法接受一个字符串或一个符号,并返回一个对象,该对象将该名称的绑定方法封装在调用了.method的同一个对象上.在这种情况下,这是绑定到Object对象的测试方法.
原文地址:https://www.jb51.cc/ruby/265192.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。