显示' Digest'中的所有常量

时间:2017-10-12 08:37:59

标签: ruby digest

我想知道如何以编程方式提前查看 private void initUIComponents(LayoutInflater inflater, @Nullable ViewGroup container) { mRootView = inflater.inflate(R.layout.fragment_home, container, false); mToolbarHome = mRootView.findViewById(R.id.toolbar_home); mBtnPause = mRootView.findViewById(R.id.btn_pause); if (mToolbarHome != null) { ((AppCompatActivity) getActivity()).setSupportActionBar(mToolbarHome); } mBtnPause.setOnClickListener(new OnClickListener() { @Override public void onClick(View view) { pauseWiFi(mToolbarHome, mBtnPause); } }); } 模块上的每个常量。下面看到的行为是由于Digest使用了here

const_missing

鉴于它们是可能的摘要中的元编程,我如何知道所有可能的摘要?

对于知识,Ruby 2.4.1中似乎可用的知识应为require 'digest' Digest.constants #=> [:Class, :REQUIRE_MUTEX, :Instance, :Base] Digest::MD5 Digest.constants #=> [:Class, :REQUIRE_MUTEX, :Instance, :Base, :MD5] Digest::SHA1 Digest.constants #=> [:Class, :REQUIRE_MUTEX, :Instance, :Base, :MD5, :SHA1]

1 个答案:

答案 0 :(得分:0)

这是从当前master branch of ruby剪下的代码:

module Digest
  def self.const_missing(name) # :nodoc:
    case name
    when :SHA256, :SHA384, :SHA512
      lib = 'digest/sha2.so'
    else
      lib = File.join('digest', name.to_s.downcase)
    end

    begin
      require lib
    rescue LoadError
      raise LoadError, "library not found for class Digest::#{name} -- #{lib}", caller(1)
    end
    unless Digest.const_defined?(name)
      raise NameError, "uninitialized constant Digest::#{name}", caller(1)
    end
    Digest.const_get(name)
  end

  # ...
end

...所以,你不能在不知道它们的情况下列出所有常量!您需要require必要的文件,或直接引用常量(这将动态加载文件,如上所示)。

我能提供的任何解决方案只能保证适用于特定版本的ruby。不幸的是,您最好只是read the documentation并明确加载每个库!