【问题标题】:The un-googleable ruby's method method不可搜索的 ruby​​ 方法方法
【发布时间】:2011-11-06 12:28:45
【问题描述】:

显然有一个名为 method 的 ruby​​ 方法,到目前为止我找不到任何文档或示例。有人可以发布一些有用的注释示例吗?

【问题讨论】:

    标签: ruby methods


    【解决方案1】:

    ruby api 文档中有关于该方法的文档

    http://www.ruby-doc.org/core-1.9.3/Object.html#method-i-method

    还有method_defined?如果您需要自己的方法,这也很有用

    http://www.ruby-doc.org/core-1.9.3/Module.html#method-i-method_defined-3F

    【讨论】:

      【解决方案2】:

      我主要用它来查找特定方法的源位置。 (示例在 ruby​​-1.9.2-p290 上的 irb 中运行)

      class Thing
        def foo
        end
      end
      
      Thing.new.method(:foo).source_location
      => ["(irb)", 2]
      
      Thing.new.method(:foo).owner
      => Thing 
      

      【讨论】:

      • 对于使用 Ruby 1.8 的用户,您可以使用owner,但不能使用source_location
      • 换句话说,您应该已经完成​​Object.new.method(:method) 来查找method 方法!
      • Object.new.method(:method) 的问题在于 #method 是一个本地方法,对消息 #source_location 返回 nil,因此是人为的示例。
      【解决方案3】:

      它是 Object 的一部分,记录在这里:

      http://www.ruby-doc.org/core-1.9.3/Object.html#method-i-method

      Method 类在此处记录,并提供了一些示例:

      http://www.ruby-doc.org/core-1.9.3/Method.html

      【讨论】:

        【解决方案4】:

        Object#method 返回的绑定方法对象的最佳用途之一是用于块。该方法的返回结果可以转换为块参数。想象一下你有:

        class Converter
          def convert_item(item)
            item.transmorph
          end
        end
        

        那么你可以这样做

        c = Converter.new
        elements.map(&c.method(:convert_item))
        

        或者当你在转换器中时

        elements.map(&method(:convert_item))
        

        哪个 IMO 比显式块创建语法更优雅。它还支持to_proc,所以你可以这样做

        some_object.callback = my_handler.method(:activate).to_proc
        

        然后在some_object 你就可以了

        @callback.call(data)
        

        【讨论】:

          【解决方案5】:

          Object#method,这是你要找的吗?

          http://www.ruby-doc.org/core-1.9.3/Object.html#method-i-method

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2010-10-12
            • 2021-10-04
            • 2015-09-11
            • 1970-01-01
            • 1970-01-01
            • 2023-03-28
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多