理解Ruby方法调用

理解Ruby方法调用,ruby,Ruby,我的问题是:当我们将一个符号传递给调用方法时会发生什么?ruby会将符号转换为字符串,然后执行它吗?如果是,那么它的目的是什么 如果没有,那么实际发生了什么? 你能详细说明一下吗? 很抱歉,我没有说清楚。当您在任何显式类或模块定义之外执行def test…时,您基本上处于对象类上下文中,因此test现在是Object 在irb def test "Hello World" end p method(:test).call #"Hello World" p method("test").c

我的问题是:当我们将一个符号传递给
调用
方法时会发生什么?ruby会将符号转换为字符串,然后执行它吗?如果是,那么它的目的是什么

如果没有,那么实际发生了什么? 你能详细说明一下吗?
很抱歉,我没有说清楚。

当您在任何显式类或模块定义之外执行
def test…
时,您基本上处于对象类上下文中,因此
test
现在是
Object

irb

def test
  "Hello World"
end

p method(:test).call  #"Hello World"
p method("test").call #"Hello World"
方法
对象
类的一个实例方法,该类基本上由所有对象继承。当您在任何显式类或模块定义之外调用
方法
时,实际上是将其作为
对象
类的方法调用,而该类本身就是
的一个实例,它是
对象
的一个子类(对不起,我知道这有点让人困惑)

因此--
方法
方法接受字符串或符号,并返回一个对象,该对象封装了调用
方法
的同一对象上该名称的绑定方法。在本例中,这是绑定到
对象
对象的
测试
方法


method(:test)。call
意味着调用
Object
test
方法,这是您之前通过
def test定义的…

无论它做什么,都是在C中对Ruby内部完成的。这不重要。@MisterCal从irb控制台,
Object.class
=>class.Ah!删除。我基于对象是类的超类这一事实做出了一个假设。我现在明白了,有点困惑哈哈。
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"]