Ruby 您如何创建一个不包含';不需要,例如标准方法,如chr、ord、inject?

Ruby 您如何创建一个不包含';不需要,例如标准方法,如chr、ord、inject?,ruby,Ruby,当您启动一个新的Ruby项目时,默认情况下您拥有所有的标准函数。如果您想要gems和其他ruby文件,您需要它们 我想创建一个默认情况下与其他标准函数一起加载的函数。只需重新打开要向其中添加方法的类即可 class String def some_method "hi there!" end end 这取决于您希望这些功能在何处可用。Ruby有一个有时被称为“开放类”或“猴子补丁”的特性,允许您向现有类添加功能。您只需声明一个与Ruby标准库中已经存在的类同名的类,并在其中

当您启动一个新的Ruby项目时,默认情况下您拥有所有的标准函数。如果您想要gems和其他ruby文件,您需要它们


我想创建一个默认情况下与其他标准函数一起加载的函数。

只需重新打开要向其中添加方法的类即可

class String

  def some_method
    "hi there!"
  end

end

这取决于您希望这些功能在何处可用。Ruby有一个有时被称为“开放类”或“猴子补丁”的特性,允许您向现有类添加功能。您只需声明一个与Ruby标准库中已经存在的类同名的类,并在其中定义方法,如下所示:

class Array
  def double_values
    map { |v| v * 2 }
  end
end
然后你可以这样使用它:

[1,2,3].double_values # => [2,4,6]

为什么?如果它不是一个“标准”函数,你应该需要它。我知道这是默认的方式。我想我更想知道默认情况下如何调用所有标准库函数。我想这可能是有可能做到的,但似乎不需要它的地方做不到。只是在这个时候,默认包含标准库函数的方式对我来说就像是黑魔法。这不是魔法,它们只是内置的。@Singularity:请参阅下面我对标准库的评论。是的,我看到了。这使得事情现在更符合逻辑。谢谢你的评论,这很有帮助!但是,这不限于上述文件吗?作为一个例子,我想做的是:a_to_I.rb
class Array def a_to_I self.map(&:to_I)end
test.rb Array=['1','2','3']p Array.a_to_I我想实现这一点,而不需要文件a_to_I.rb,也不需要将代码添加到文件test.rb,如果您希望其他类也可以使用它,只需在链的更高位置定义它。例如,如果您希望它对所有可枚举项都可用,那么您应该在可枚举项上定义它。上面是对象、内核和BasicObject<代码>数组。祖先将向您显示层次结构。如果您不需要该文件,Ruby如何知道您想要使用它?我不确定,这时我问了一个更高的问题:默认情况下如何调用标准库函数?它是内置在解释器中,还是在某个透明的地方都需要它?@Singularity:你在混合“核心ruby”和“标准库”。您不需要的核心ruby功能。它就在那里(
Array
class,例如)。虽然stdlib也随ruby一起提供,但您必须
要求
您想要使用的部分。例如OpenStruct。不过,他需要一个具有此定义的文件。否则它就看不见了。