Ruby 将类本身用作方法

Ruby 将类本身用作方法,ruby,Ruby,今天我在Ruby中遇到了这个类,并注意到您可以直接将该类本身作为方法调用(基本上会返回一个新实例): 路径名(“某些/路径”) # => # 我一直在尝试用我的CustomClass复制同样的东西,但没有成功。我不知道这些方法被调用了什么,我也找不到任何Ruby代码可以让我知道如何做到这一点我的问题是如何使用类名作为方法? 到目前为止我已经尝试过的事情: 定义self.self() 定义self.class() 使用类这不是使用类本身。这是在内核中调用与类同名的方法。通常不鼓励自己动手,因为

今天我在Ruby中遇到了这个类,并注意到您可以直接将该类本身作为方法调用(基本上会返回一个新实例):

路径名(“某些/路径”) # => # 我一直在尝试用我的
CustomClass
复制同样的东西,但没有成功。我不知道这些方法被调用了什么,我也找不到任何Ruby代码可以让我知道如何做到这一点我的问题是如何使用类名作为方法?

到目前为止我已经尝试过的事情:

  • 定义
    self.self()
  • 定义
    self.class()

  • 使用
    类这不是使用类本身。这是在
    内核中调用与类同名的方法。通常不鼓励自己动手,因为你用新方法污染了几乎所有的对象,并导致混乱(正如你已经看到的)


    是该方法的文档。还有一些类似于
    数组
    哈希
    字符串
    ,。

    这不是类调用,而是快捷方式。最棘手的部分是,它是为
    内核
    模块定义的,该模块以您刚才指定的形式随处可用

    请转到的链接。您可以看到,需要一个
    路径名
    模块,它扩展
    内核
    模块以添加相同名称的方法


    老实说,我强烈建议不要用自己的方法扩展
    内核。或者至少要使用

    您正在寻找的是一个转换方法来强制输入到类的实例

    它不是类本身的方法,而是
    内核
    模块中的方法。因此,为了能够使用
    MyClass(value)
    的形式,您应该将该方法添加到模块中:

    模块内核
    def Foo(值)
    #您可以在这里实现任何逻辑
    值。_是(Foo)吗?值:Foo.new(值)
    结束
    模块功能:Foo
    结束
    福班
    def初始化(bar)
    @巴
    结束
    结束
    baz=Foo('bar'))
    #=> #
    富(巴兹)
    #=> #
    baz==Foo(baz)
    #=>正确
    
    Hmmm,很有趣。所以定义它的唯一原因就是创建一条捷径?@Sheharyar,是的。而且大多数人不使用大写字母的方法,所以它也没那么有用。我在解析用户输入时使用了很多方法,发现它非常有用。此外,在
    内核中定义方法后,应该调用
    模块\u函数:Foo
    Pathname("some/path")
    # => #<Pathname:some/path>
    
    module Kernel
      def Foo(value)
        # you can implement any logic here
        value.is_a?(Foo) ? value : Foo.new(value)
      end
      module_function :Foo
    end
    
    class Foo
      def initialize(bar)
        @bar = bar
      end
    end
    
    baz = Foo('bar')
    #=> #<Foo:0x007fd4e5070370 @bar="bar">
    Foo(baz)
    #=> #<Foo:0x007fd4e5070370 @bar="bar">
    baz == Foo(baz)
    #=> true