Ruby 无法加载 'random',默认 gem

Ruby can't load 'random', a default gem

这是我第一次使用 Ruby,我正在使用 random。当我 运行 ruby main.rb 时,我收到此错误消息:

Traceback (most recent call last):
    6: from main.rb:3:in `<main>'
    5: from main.rb:3:in `require_relative'
    4: from /home/groctel/Documents/Repositories/civitas-ruby/Civitas/lib/civitas_juego.rb:4:in `<top (required)>'
    3: from /home/groctel/Documents/Repositories/civitas-ruby/Civitas/lib/civitas_juego.rb:4:in `require_relative'
    2: from /home/groctel/Documents/Repositories/civitas-ruby/Civitas/lib/dado.rb:3:in `<top (required)>'
    1: from /usr/lib/ruby/2.6.0/rubygems/core_ext/kernel_require.rb:54:in `require'
/usr/lib/ruby/2.6.0/rubygems/core_ext/kernel_require.rb:54:in `require': cannot load such file -- random (LoadError)

于是,我认真地查了资料。这是踪迹:

main.rb

# encoding:utf-8

require_relative "civitas_juego.rb"
require_relative "dado.rb"
require_relative "practica3.rb"
require_relative "vista_textual.rb"

# ...

dado.rb

# encoding:utf-8

require 'random'
require 'singleton'
require_relative 'diario'

# ...

而错误的最深层来源,kernel_require.rb

  def require(path)
    RUBYGEMS_ACTIVATION_MONITOR.enter

    path = path.to_path if path.respond_to? :to_path

    if spec = Gem.find_unresolved_default_spec(path)
      Gem.remove_unresolved_default_spec(spec)
      begin
        Kernel.send(:gem, spec.name)
      rescue Exception
        RUBYGEMS_ACTIVATION_MONITOR.exit
        raise
      end
    end

    # If there are no unresolved deps, then we can use just try
    # normal require handle loading a gem from the rescue below.

    if Gem::Specification.unresolved_deps.empty?
      RUBYGEMS_ACTIVATION_MONITOR.exit
      return gem_original_require(path) # <- THIS IS LINE 54
    end

我是 运行ning Arch Linux ruby 2.6.5-1。据我了解 from the documentationrandom 是内核 class 而不是 gem 我必须自己构建。尽管如此,我还是尝试了 gem install random 并得到了这个错误:

Building native extensions. This could take a while...
ERROR:  Error installing random:
    ERROR: Failed to build gem native extension.

    current directory: /home/groctel/.gem/ruby/2.6.0/gems/random-0.2.1/ext/random
/usr/bin/ruby -I /usr/lib/ruby/2.6.0 -r ./siteconf20191112-16451-127m0rj.rb extconf.rb
creating Makefile

current directory: /home/groctel/.gem/ruby/2.6.0/gems/random-0.2.1/ext/random
make "DESTDIR=" clean

current directory: /home/groctel/.gem/ruby/2.6.0/gems/random-0.2.1/ext/random
make "DESTDIR="
compiling mersenne_twister_ext.c
mersenne_twister_ext.c: In function ‘mt_initialize’:
mersenne_twister_ext.c:294:25: error: ‘struct RArray’ has no member named ‘len’
  294 |     if (RARRAY(arg_seed)->len < N)
      |                         ^~
mersenne_twister_ext.c:295:29: error: ‘struct RArray’ has no member named ‘len’
  295 |       max = RARRAY(arg_seed)->len;
      |                             ^~
mersenne_twister_ext.c: At top level:
mersenne_twister_ext.c:246:17: warning: ‘differ’ is static but declared in inline function ‘hash’ which is not static
  246 |   static uint32 differ = 0;  // guarantee time-based seeds will change
      |                 ^~~~~~
make: *** [Makefile:245: mersenne_twister_ext.o] Error 1

make failed, exit code 2

Gem files will remain installed in /home/groctel/.gem/ruby/2.6.0/gems/random-0.2.1 for inspection.
Results logged to /home/groctel/.gem/ruby/2.6.0/extensions/x86_64-linux/2.6.0/random-0.2.1/gem_make.out

我不知道接下来该怎么做,看来我走错了方向。 我需要做什么才能加载 random

您不需要要求 random,因为它已包含在 Ruby 中。所以没有 gem 需要安装,没有什么要求,你基本上可以直接使用它。