pid = Process.fork do
puts 'From child process'
exit
end
15653
pid = Process.fork
if pid
puts "forked: #{$$}"
else
puts 'From child process'
exit
end
forked: 15652
pid = Process.fork do
sleep 10
exit
end
Process.waitpid pid
15655
current_time.rb として保存し実行
require 'socket'
Process.daemon # プロセスをデーモンとして動作させる
TCPServer.open 'localhost', 4423 do |server|
loop do
client = server.accept # クライアントからの接続を待ち受ける
client.puts Time.now # 現在時刻を返す
client.close
end
end
Human = Struct.new(:age, :gender)
human = Human.new(10, 'male')
p human.age
p human.gender
human.age = 20
p human[:age]
human[:age] = 100
p Human.members
human.members
10 "male" 20 [:age, :gender]
[:age, :gender]
# 他の言語のように、値渡しになるわけではなく、Struct も Class
human2 = human
human2.age = 50
p human2.age
human.age
Human.class
50
Class
Struct.new('Human', 'age', 'gender')
Struct::Human
p Struct::Human.new
p Human = Struct.new('Age', 'Gender')
p Human = Struct.new('age', 'gender')
#<struct Struct::Human age=nil, gender=nil>
(pry):41: warning: already initialized constant Human (pry):19: warning: previous definition of Human was here
Struct::Age
NameError: identifier age needs to be constant (pry):43:in `new' (pry):43:in `<main>' /Users/ketchup/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0/gems/pry-0.11.3/lib/pry/pry_instance.rb:355:in `eval' /Users/ketchup/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0/gems/pry-0.11.3/lib/pry/pry_instance.rb:355:in `evaluate_ruby' /Users/ketchup/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0/gems/pry-0.11.3/lib/pry/pry_instance.rb:323:in `handle_line' /Users/ketchup/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0/gems/pry-0.11.3/lib/pry/pry_instance.rb:243:in `block (2 levels) in eval' /Users/ketchup/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0/gems/pry-0.11.3/lib/pry/pry_instance.rb:242:in `catch' /Users/ketchup/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0/gems/pry-0.11.3/lib/pry/pry_instance.rb:242:in `block in eval' /Users/ketchup/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0/gems/pry-0.11.3/lib/pry/pry_instance.rb:241:in `catch' /Users/ketchup/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0/gems/pry-0.11.3/lib/pry/pry_instance.rb:241:in `eval' /Users/ketchup/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0/gems/iruby-0.3/lib/iruby/backend.rb:66:in `eval' /Users/ketchup/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0/gems/iruby-0.3/lib/iruby/backend.rb:12:in `eval' /Users/ketchup/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0/gems/iruby-0.3/lib/iruby/kernel.rb:87:in `execute_request' /Users/ketchup/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0/gems/iruby-0.3/lib/iruby/kernel.rb:47:in `dispatch' /Users/ketchup/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0/gems/iruby-0.3/lib/iruby/kernel.rb:37:in `run' /Users/ketchup/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0/gems/iruby-0.3/lib/iruby/command.rb:70:in `run_kernel' /Users/ketchup/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0/gems/iruby-0.3/lib/iruby/command.rb:34:in `run' /Users/ketchup/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0/gems/iruby-0.3/bin/iruby:5:in `<top (required)>' /Users/ketchup/.rbenv/versions/2.5.1/bin/iruby:23:in `load' /Users/ketchup/.rbenv/versions/2.5.1/bin/iruby:23:in `<main>'
Foo = Struct.new(:one, :two, :three)
p foo = Foo.new('a', 'b', 'c')
foo.each {|value| puts value }
p foo.members
foo.each_pair { |field, value| puts field, value }
p foo.map { |value| value.upcase }
Hash[foo.each_pair.to_a]
#<struct Foo one="a", two="b", three="c"> a b c [:one, :two, :three] one a two b three c ["A", "B", "C"]
{:one=>"a", :two=>"b", :three=>"c"}
# Ruby 2.3 から Struct にも dig メソッドが追加
Bar = Struct.new(:a)
p bar = Bar.new({b: [:c, :d]})
bar.dig(:a, :b, 1)
#<struct Bar a={:b=>[:c, :d]}>
:d
Human = Struct.new('Human', :age, :gender) do
def teen?
(13..19).include?(age)
end
end
p Human.new(10).teen?
p Human.new(14).teen?
Human.ancestors
(pry):61: warning: redefining constant Struct::Human (pry):61: warning: already initialized constant Human (pry):41: warning: previous definition of Human was here
false true
[Struct::Human, Struct, Enumerable, Object, PP::ObjectMixin, JSON::Ext::Generator::GeneratorMethods::Object, Kernel, BasicObject]
class Human2 < Struct.new('Human', :age, :gender)
def teen?
(13..19).include?(age)
end
end
p Human2.new(10).teen?
p Human2.new(14).teen?
Human2.ancestors
(pry):71: warning: redefining constant Struct::Human
false true
[Human2, Struct::Human, Struct, Enumerable, Object, PP::ObjectMixin, JSON::Ext::Generator::GeneratorMethods::Object, Kernel, BasicObject]
array = [1, '2', [3], Time.now]
p m = Marshal.dump(array)
Marshal.load(m)
"\x04\b[\ti\x06I\"\x062\x06:\x06ET[\x06i\bIu:\tTime\r\xA9\xA3\x1D\x80\xF5\x17o@\a:\voffseti\x02\x90~:\tzoneI\"\bJST\x06;\x00F"
[1, "2", [3], 2018-09-29 18:16:06 +0900]
p Marshal::MAJOR_VERSION
Marshal::MINOR_VERSION
4
8
class Something
attr_accessor :source, :temporary
def marshal_dump
source
end
def marshal_load(s)
self.source = s
end
end
origin = Something.new
origin.source = 'necessary'
origin.temporary = 'drop me'
p data = Marshal.dump(origin)
restored = Marshal.load(data)
p restored.source
p restored.temporary
"\x04\bU:\x0ESomethingI\"\x0Enecessary\x06:\x06ET" "necessary" nil
ObjectSpace.each_object(Class) {|c| p c}
Gem::Resolver::SpecSpecification #<Class:FileUtils::Verbose> Gem::Resolver::Specification #<Class:Gem::Version> Gem::Version Gem::Resolver::Molinillo::Resolver::Resolution::Conflict #<Class:Gem::Resolver::Molinillo::DependencyGraph::AddEdgeNoCircular> Gem::Resolver::Molinillo::DependencyGraph::AddEdgeNoCircular Gem::Resolver::Molinillo::Resolver::Resolution Gem::UnsatisfiableDependencyError Gem::SystemExitException Gem::VerificationError Gem::RubyVersionMismatch Gem::RemoteSourceException Gem::RemoteInstallationSkipped Gem::RemoteInstallationCancelled Gem::RemoteError Gem::OperationNotSupportedError Gem::InvalidSpecificationException Gem::RuntimeRequirementNotMetError Gem::InstallError Gem::ImpossibleDependenciesError Gem::SpecificGemNotFoundException Gem::GemNotFoundException Gem::FormatException Gem::FilePermissionError Gem::EndOfYAMLException Gem::DocumentError Gem::GemNotInHomeException Gem::DependencyResolutionError Gem::DependencyRemovalException Gem::DependencyError Gem::CommandLineError Gem::Exception Gem::RequestSet::Lockfile::Tokenizer::Token #<Class:Gem::RequestSet::Lockfile::Tokenizer> Gem::RequestSet::Lockfile::Tokenizer #<Class:Gem::Resolver::Molinillo::DependencyGraph::Action> Gem::Resolver::Molinillo::DependencyGraph::Action #<Class:Gem::Resolver::Molinillo::DependencyGraph> Gem::Resolver::Molinillo::DependencyGraph Gem::RequestSet::Lockfile::Parser Gem::Requirement::BadRequirementError #<Class:0x00007ffdd50690c0> #<Class:Gem::Requirement> Gem::Requirement #<Class:MethodSource::MethodExtensions> #<Class:Gem::Platform> Gem::Platform Gem::Resolver::IndexSpecification Gem::Resolver::GitSpecification #<Class:DidYouMean::Levenshtein> Gem::Resolver::Molinillo::VersionConflict Gem::Resolver::Molinillo::CircularDependencyError Gem::Resolver::BestSet Gem::Resolver::Molinillo::NoSuchDependencyError Gem::Resolver::Molinillo::ResolverError #<Class:Gem::Resolver::Molinillo::DependencyGraph::Log> Gem::Resolver::Molinillo::DependencyGraph::Log #<Class:Gem::Resolver::Molinillo::DependencyGraph::Tag> Gem::Resolver::Molinillo::DependencyGraph::Tag Gem::Source::Git #<Class:FileUtils> CZMQ::FFI::Zclock::DestroyedError #<Class:CZMQ::FFI::Zclock> CZMQ::FFI::Zclock Pry::LastException #<Class:Pry::Command::CodeCollector> Pry::Command::CodeCollector OpenSSL::Digest::Digest #<Class:OpenSSL::Digest::SHA> OpenSSL::Digest::SHA #<Class:OpenSSL::Digest::DSS1> OpenSSL::Digest::DSS1 #<Class:OpenSSL::Digest::DSS> OpenSSL::Digest::DSS #<Class:OpenSSL::Digest::SHA512> OpenSSL::Digest::SHA512 #<Class:OpenSSL::Digest::SHA384> OpenSSL::Digest::SHA384 #<Class:OpenSSL::Digest::SHA256> OpenSSL::Digest::SHA256 #<Class:OpenSSL::Digest::SHA224> OpenSSL::Digest::SHA224 OpenSSL::Cipher::Cipher OpenSSL::Cipher::AES256 #<Class:OpenSSL::Digest::SHA1> OpenSSL::Digest::SHA1 OpenSSL::Cipher::AES192 #<Class:OpenSSL::Digest::RIPEMD160> OpenSSL::Digest::RIPEMD160 #<Class:OpenSSL::Digest::MDC2> OpenSSL::Digest::MDC2 #<Class:OpenSSL::Digest::MD5> OpenSSL::Digest::MD5 #<Class:OpenSSL::Digest::MD4> OpenSSL::Digest::MD4 #<Class:OpenSSL::Digest::MD2> OpenSSL::Digest::MD2 #<Class:#<Class:MultiJson::Adapters::JsonCommon>> #<Class:MultiJson::Adapters::JsonCommon> MultiJson::Adapters::JsonCommon #<Class:#<Class:MultiJson::Adapter>> #<Class:MultiJson::Adapter> MultiJson::Adapter #<Class:Singleton> Pry::Command::Ls::LocalNames #<Class:Pry::REPL> Pry::REPL Pry::Command::Ls::InstanceVars Foo Pry::Command::Ls::SelfMethods Pry::Command::Ls::Methods #<Class:MultiJson::Adapters::JsonGem> MultiJson::Adapters::JsonGem #<Class:OpenSSL::PKCS5> Pry::InputLock::Interrupt #<Class:Pry::InputLock> Pry::InputLock OpenSSL::SSL::SSLServer #<Class:OpenSSL::SSL> OpenSSL::Cipher::RC5 OpenSSL::Cipher::RC4 OpenSSL::Cipher::RC2 OpenSSL::Cipher::IDEA OpenSSL::Cipher::DES OpenSSL::Cipher::BF OpenSSL::Cipher::CAST5 OpenSSL::Cipher::AES Pry::Command::Edit Pry::Command::SimplePrompt Pry::Command::Ri #<Class:JSON::Ext::Generator::GeneratorMethods::String> JSON::Ext::Generator::State Pry::Command::RaiseUp JSON::Ext::Parser #<Class:CZTop::Socket> CZTop::Socket Pry::Command::ShellMode #<class(Pry::Command "history")> #<Class:CZMQ::FFI::Signals> #<Class:#<Pry::Config:0x00007ffdd50f4e90>> #<Class:CZMQ::FFI::Errors> CZMQ::FFI::Zfile::DestroyedError #<Class:CZMQ::FFI::Zfile> CZMQ::FFI::Zfile #<Class:Pry::ClassCommand> Pry::ClassCommand Pry::BlockCommand #<Class:#<Object:0x00007ffdd50f6290>> #<Class:Pry::Command> Pry::Command #<Class:#<Object:0x00007ffdd50f6a10>> #<Class:#<Object:0x00007ffdd50f6b78>> #<Class:#<Object:0x00007ffdd50f7190>> Pry::Command::GemReadme #<class(Pry::Command "show-command")> #<class(Pry::Command "edit-method")> CZMQ::FFI::Zsys::DestroyedError #<Class:CZMQ::FFI::Zsys> CZMQ::FFI::Zsys Pry::Command::Version Pry::Command::ListInspectors #<Class:#<Pry::Config:0x00007ffdd51532d8>> Pry::Command::Stat FFI::Type::Builtin FFI::Type #<Class:Pry::Rubygem> #<class(Pry::Command "clipit")> #<Class:Pry::Config::Default> Pry::Config::Default CZMQ::FFI::Zconfig::DestroyedError #<Class:CZMQ::FFI::Zconfig> CZMQ::FFI::Zconfig Pry::Command::SwitchTo Pry::Command::ChangePrompt CodeRay::Encoders::Terminal Pry::Command::ShellCommand #<Class:CZTop::HasFFIDelegate> Socket::UDPSource CZTop::CertStore #<Class:CZTop::Certificate> CZTop::Certificate #<Class:Pry::Method::Patcher> Pry::Method::Patcher Pry::Command::ReloadCode Pry::Command::BangPry Pry::Method::Disowned #<Class:CZTop::Config> CZTop::Config CZTop::Proxy::Configurator CZTop::Proxy #<class(Pry::Command "test-ansi")> #<class(Pry::Command "pessoa-poem")> #<class(Pry::Command "cohen-poem")> #<class(Pry::Command "east-coker")> #<class(Pry::Command "get-naked")> #<class(Pry::Command /!s\/(.*?)\/(.*?)/)> #<class(Pry::Command "nyan-cat")> #<Class:#<Pry::CommandSet:0x00007ffdd5931b30>> #<Class:CZTop::Z85> CZTop::Z85 Pry::Command::Wtf CZTop::Config::Traversing::ChildrenAccessor CZTop::Config::Traversing::SiblingsAccessor CZTop::Config::Traversing::FamilyAccessor #<class(Pry::Command "?")> #<Class:CodeRay::PluginHost> CodeRay::PluginHost::HostNotFound CodeRay::PluginHost::PluginNotFound Pry::Helpers::Table #<Class:Pry::Helpers> CZTop::Poller::ZMQ::PollerEvent #<Class:CZTop::Poller::ZMQ> #<Class:CZTop::Poller::ZPoller> CZTop::Poller::ZPoller CZTop::Socket::GATHER CZTop::Socket::SCATTER CZTop::Socket::DISH CZTop::Socket::RADIO CZTop::Socket::STREAM CZTop::Socket::PAIR CZTop::Socket::PULL CZTop::Socket::PUSH CZTop::Socket::XSUB CZTop::Socket::XPUB CZTop::Socket::SUB CZTop::Socket::PUB CZTop::Socket::ROUTER CZTop::Socket::DEALER CZTop::Socket::REP CZTop::Socket::REQ CZTop::Socket::SERVER CZTop::Socket::CLIENT Pry::Command::ShowDoc CZTop::Z85::Pipe::Strategy::Parallel CZTop::Z85::Pipe::Strategy::Sequential CZTop::Z85::Pipe::Strategy CZTop::Z85::Pipe Human2 Struct::Human CZTop::ZAP::Response::InternalError CZTop::ZAP::Response::TemporaryError #<Class:CZTop::ZAP::Response> CZTop::ZAP::Response #<Class:CZTop::ZAP::Request> CZTop::ZAP::Request CZTop::ZAP::VersionMismatch CZTop::ZAP::Error #<class(Pry::Command "!!!")> #<Class:Pry::Helpers::Text> #<Class:Pry::Helpers::CommandHelpers> Pry::Command::Ls::Constants Struct::Age Pry::Command::Ls::Globals Pry::Slop::InvalidCommandError Pry::Slop::InvalidOptionError Pry::Slop::InvalidArgumentError Pry::Slop::MissingOptionError Pry::Slop::MissingArgumentError Pry::Slop::Error Pry::Slop::Commands Pry::Command::Ls::Formatter #<Class:Pry::Slop> Pry::Slop Struct::Human StringIO #<Class:Gem::List> Gem::List URI::HTTPS #<Class:URI::HTTP> URI::HTTP Gem::StubSpecification::StubLine #<Class:Gem::StubSpecification> Gem::StubSpecification URI::BadURIError URI::InvalidComponentError URI::InvalidURIError URI::Error #<Class:URI> #<Class:URI::Util> #<Class:Gem::Resolver::Molinillo::ResolutionState> Gem::Resolver::Molinillo::ResolutionState URI::RFC3986_Parser #<Class:URI::FTP> URI::FTP Gem::PathSupport #<Class:Gem::Resolver::Molinillo::DependencyGraph::DetachVertexNamed> Gem::Resolver::Molinillo::DependencyGraph::DetachVertexNamed URI::RFC2396_Parser #<Class:RbConfig> #<Class:Gem::BasicSpecification> Gem::BasicSpecification TracePoint Complex::compatible Complex Rational::compatible Rational FiberError Fiber #<Class:Process::Sys> #<Class:Process::GID> #<Class:Process::UID> Process::Tms Process::Status Process::Waiter #<Class:Process> Thread::ConditionVariable Thread::SizedQueue ClosedQueueError Thread::Queue Thread::Mutex ThreadError ThreadGroup RubyVM::InstructionSequence Thread::Backtrace::Location Thread::Backtrace #<Class:Thread> Thread RubyVM Enumerator::Yielder Enumerator::Generator StopIteration Enumerator::Lazy Enumerator ObjectSpace::WeakMap #<Class:ObjectSpace> #<Class:GC::Profiler> #<Class:GC> #<Class:Math> Math::DomainError Binding UnboundMethod Method SystemStackError LocalJumpError Proc Gem::Dependency #<Class:Signal> Random #<Class:#<Class:BasicObject>> #<Class:#<Class:Object>> #<Class:#<Class:Module>> #<Class:#<Class:Class>> #<Class:Time> Time #<Class:Dir> Dir File::Stat #<Class:FileTest> File ARGF.class #<Class:URI::Generic> URI::Generic IO::EINPROGRESSWaitWritable IO::EINPROGRESSWaitReadable IO::EAGAINWaitWritable IO::EAGAINWaitReadable #<Class:IO> IO EOFError IOError Range #<Class:Marshal> Encoding::Converter Encoding::ConverterNotFoundError Encoding::InvalidByteSequenceError Encoding::UndefinedConversionError MatchData Regexp RegexpError #<Class:Struct> Struct #<Class:#<Object:0x00007ffdd5890e60>> Hash #<Class:#<Class:Gem>> Array Errno::ERPCMISMATCH Errno::EPROGUNAVAIL Errno::EPROGMISMATCH Errno::EPROCUNAVAIL Errno::EPROCLIM Errno::ENOTSUP Errno::ENOATTR Errno::ENEEDAUTH Errno::EFTYPE Errno::EBADRPC Errno::EAUTH Errno::EOWNERDEAD Errno::ENOTRECOVERABLE Errno::ECANCELED Errno::EDQUOT Errno::ESTALE Errno::EINPROGRESS Errno::EALREADY Errno::EHOSTUNREACH Errno::EHOSTDOWN Errno::ECONNREFUSED Errno::ETIMEDOUT Errno::ETOOMANYREFS Errno::ESHUTDOWN Errno::ENOTCONN Errno::EISCONN Gem::SourceFetchProblem Errno::ENOBUFS Errno::ECONNRESET Errno::ECONNABORTED Errno::ENETRESET Errno::ENETUNREACH Errno::ENETDOWN Errno::EADDRNOTAVAIL Errno::EADDRINUSE Errno::EAFNOSUPPORT Errno::EPFNOSUPPORT Errno::EOPNOTSUPP Errno::ESOCKTNOSUPPORT Errno::EPROTONOSUPPORT Errno::ENOPROTOOPT Errno::EPROTOTYPE Errno::EMSGSIZE Gem::PlatformMismatch Errno::EDESTADDRREQ Errno::ENOTSOCK Errno::EUSERS Gem::ErrorReason Errno::EILSEQ Errno::EOVERFLOW Gem::ConflictError Errno::EBADMSG Errno::EMULTIHOP Errno::EPROTO Errno::ENOLINK Errno::EREMOTE Gem::MissingSpecVersionError Errno::ENOSR Errno::ETIME Errno::ENODATA Errno::ENOSTR Gem::MissingSpecError Errno::EIDRM Errno::ENOMSG Gem::LoadError Errno::ELOOP Errno::ENOTEMPTY Errno::ENOSYS Errno::ENOLCK Errno::ENAMETOOLONG Errno::EDEADLK Errno::ERANGE Errno::EDOM Errno::EPIPE Errno::EMLINK Errno::EROFS Errno::ESPIPE Errno::ENOSPC Errno::EFBIG Errno::ETXTBSY Errno::ENOTTY Errno::EMFILE Errno::ENFILE Errno::EINVAL Errno::EISDIR Errno::ENOTDIR Errno::ENODEV Errno::EXDEV Errno::EEXIST Errno::EBUSY Errno::ENOTBLK Errno::EFAULT Errno::EACCES Errno::ENOMEM Errno::EAGAIN Errno::ECHILD Errno::EBADF Errno::ENOEXEC Errno::E2BIG Errno::ENXIO Errno::EIO Errno::EINTR Errno::ESRCH Errno::ENOENT Errno::EPERM Errno::NOERROR Float Integer Numeric FloatDomainError ZeroDivisionError UncaughtThrowError Warning::buffer #<Class:Warning> SystemCallError Encoding::CompatibilityError EncodingError NoMemoryError SecurityError FrozenError RuntimeError NoMethodError NameError::message NameError NotImplementedError LoadError SyntaxError ScriptError RangeError KeyError IndexError #<Class:ArgumentError> ArgumentError TypeError #<Class:StandardError> StandardError Interrupt SignalException fatal SystemExit #<Class:Exception> Exception Symbol #<Class:String> String Encoding #<Class:#<Object:0x00007ffdd58ba2b0>> FalseClass TrueClass #<Class:Data> Data #<Class:BasicObject> #<Class:Object> #<Class:Module> #<Class:Class> NilClass #<Class:Kernel> Class Module Object BasicObject #<Class:Gem::Resolver::Molinillo::DependencyGraph::AddVertex> Gem::Resolver::Molinillo::DependencyGraph::AddVertex CZMQ::FFI::Zpoller::DestroyedError #<Class:CZMQ::FFI::Zpoller> CZMQ::FFI::Zpoller #<Class:OpenSSL::KDF> OpenSSL::KDF::KDFError OpenSSL::ASN1::EndOfContent OpenSSL::ASN1::Set OpenSSL::ASN1::Sequence OpenSSL::ASN1::GeneralizedTime OpenSSL::ASN1::UTCTime OpenSSL::ASN1::ObjectId OpenSSL::ASN1::Null OpenSSL::ASN1::BMPString OpenSSL::ASN1::UniversalString OpenSSL::ASN1::GeneralString OpenSSL::ASN1::ISO64String CZMQ::FFI::Zstr::DestroyedError #<Class:CZMQ::FFI::Zstr> CZMQ::FFI::Zstr #<Class:#<Module:0x00007ffdd58fdf10>> #<Class:Delegator> Delegator Gem::Resolver::APISpecification OpenSSL::PKey::DH OpenSSL::PKey::DHError #<Class:OpenSSL::Config> OpenSSL::Config OpenSSL::ConfigError Gem::Resolver::LockSet #<Class:OpenSSL::Digest> OpenSSL::Digest Gem::Resolver::Molinillo::DependencyGraph::Edge Gem::Resolver::Molinillo::DependencyGraph::Vertex IRuby::Display::Renderer #<Class:IRuby::Display::Representation> IRuby::Display::Representation FileUtils::Entry_ #<Class:IRuby::Display> #<Class:Etc::Group> Etc::Group #<Class:Etc::Passwd> Etc::Passwd Pry::Command::GemSearch Pry::History #<Class:Etc> Gem::Source Pry::Pager::SimplePager #<Class:Pry::Pager::NullPager> Pry::Pager::NullPager Pry::Pager::StopPaging Pry::Pager #<Class:Pry::Terminal> Pry::Terminal #<Class:CZTop::CertStore> CZMQ::FFI::Zarmour::DestroyedError #<Class:CZMQ::FFI::Zarmour> CZMQ::FFI::Zarmour Pry::Result CZMQ::FFI::Zuuid::DestroyedError #<Class:CZMQ::FFI::Zuuid> CZMQ::FFI::Zuuid CZTop::Authenticator CZMQ::FFI::Zhash::DestroyedError #<Class:CZMQ::FFI::Zhash> CZMQ::FFI::Zhash Pry::PluginManager::Plugin Pry::PluginManager::NoPlugin Pry::PluginManager Pry::Command::Bang Pry::CommandSet Pry::NoCommandError CZTop::ZsockOptions::OptionsAccessor CZMQ::FFI::Zcertstore::DestroyedError #<Class:CZMQ::FFI::Zcertstore> CZMQ::FFI::Zcertstore #<Class:CZMQ::FFI::LibZMQ> CZMQ::FFI::Zframe::DestroyedError #<Class:CZMQ::FFI::Zframe> CZMQ::FFI::Zframe Pry::Command::PryBacktrace Pry::Command::GemInstall #<class(Pry::Command "quit-program")> #<Class:Pry::Helpers::OptionsHelpers> Pathname MethodSource::SourceNotFoundError #<Class:MethodSource> #<Class:Pry::Command::FindMethod> #<Class:0x00007ffdd6015078> Pry::Command::FindMethod #<Class:Gem::Specification> Gem::Specification #<Class:URI::MailTo> URI::MailTo #<Class:MethodSource::CodeHelpers::IncompleteExpression> #<Class:#<Object:0x00007ffdd6039c48>> #<Class:Gem::Resolver::Molinillo::DependencyGraph::DeleteEdge> Gem::Resolver::Molinillo::DependencyGraph::DeleteEdge CZMQ::FFI::Zsock::DestroyedError #<Class:CZMQ::FFI::Zsock> CZMQ::FFI::Zsock Pry::Hooks #<Class:CZMQ::FFI> #<Class:IRuby::Kernel> IRuby::Kernel #<Class:CZMQ::FFI::LibC> FFI::ManagedStruct #<Class:Pry::Helpers::BaseHelpers> Monitor #<Class:Gem::Deprecate> #<Class:MonitorMixin> MonitorMixin::ConditionVariable::Timeout MonitorMixin::ConditionVariable #<Class:Gem> URI::LDAPS #<Class:SortedSet> SortedSet #<Class:URI::LDAP> URI::LDAP #<Class:Set> Set CZMQ::FFI::ZdirPatch::DestroyedError OpenSSL::Cipher::AES128 Gem::RequestSet::Lockfile::ParseError #<Class:Gem::RequestSet::Lockfile> Gem::RequestSet::Lockfile #<Class:CZMQ::FFI::ZdirPatch> CZMQ::FFI::ZdirPatch IRuby::MultiLogger Gem::Source::Installed #<Class:IRuby> Pry::Inspector OpenSSL::ASN1::GraphicString OpenSSL::ASN1::IA5String Logger::LogDevice #<Class:Logger::Period> Logger::Formatter Logger::ShiftingError Logger::Error OpenSSL::ASN1::VideotexString Logger OpenSSL::ASN1::T61String #<Class:DidYouMean> OpenSSL::ASN1::PrintableString Gem::Resolver::Molinillo::PossibilityState Gem::Resolver::Molinillo::DependencyState DidYouMean::DeprecatedIgnoredCallers DidYouMean::PlainFormatter OpenSSL::OCSP::BasicResponse Gem::RequestSet::GemDependencyAPI DidYouMean::NullChecker DidYouMean::KeyErrorChecker DidYouMean::MethodNameChecker Gem::Resolver::VendorSpecification OpenSSL::X509::ExtensionFactory OpenSSL::X509::ExtensionError #<Class:#<Object:0x00007ffdd60afa60>> DidYouMean::VariableNameChecker Gem::Resolver::InstalledSpecification DidYouMean::ClassNameChecker::ClassName DidYouMean::ClassNameChecker Gem::Resolver::Molinillo::Resolver SimpleDelegator Gem::Resolver::APISet Pry::Indent::UnparseableNestingError Gem::Resolver::Stats CZMQ::FFI::Zdir::DestroyedError #<Class:CZMQ::FFI::Zdir> CZMQ::FFI::Zdir #<Class:Gem::Resolver> Gem::Resolver #<Class:Gem::Util> #<Class:Gem::Resolver::Molinillo::DependencyGraph::SetPayload> Gem::Resolver::Molinillo::DependencyGraph::SetPayload #<Class:Pry::Indent> Pry::Indent Gem::Resolver::ActivationRequest Gem::Source::SpecificFile CZMQ::FFI::Zchunk::DestroyedError #<Class:CZMQ::FFI::Zchunk> CZMQ::FFI::Zchunk Gem::Source::Vendor Gem::Source::Lock Gem::Source::Local #<Class:Gem::BundlerVersionFinder> CZMQ::FFI::Zcert::DestroyedError #<Class:CZMQ::FFI::Zcert> CZMQ::FFI::Zcert IRuby::OStream CZMQ::FFI::Zactor::DestroyedError #<Class:CZMQ::FFI::Zactor> CZMQ::FFI::Zactor IRuby::PryBackend IRuby::PlainBackend Pry::Command::SaveFile #<Class:IRuby::HTML> #<Class:IRuby::LaTeX> FFI::AutoPointer::CallableReleaser FFI::AutoPointer::DefaultReleaser FFI::AutoPointer::Releaser #<Class:FFI::AutoPointer> FFI::AutoPointer Tempfile::Remover #<Class:Tempfile> Tempfile FFI::StructLayoutBuilder #<Class:#<Class:0x00007ffdd60e9670>> #<Class:0x00007ffdd60e9670> #<Class:Dir::Tmpname> Digest::Base #<Class:Digest::Class> Digest::Class #<Class:Digest> FFI::NullPointerError #<Class:FFI::AbstractMemory> FFI::AbstractMemory #<Class:FFI::LastError> FFI::ArrayType OpenSSL::PKey::DSA OpenSSL::PKey::DSAError OpenSSL::PKey::RSA OpenSSL::PKey::RSAError #<Class:OpenSSL::PKey> OpenSSL::PKey::PKey OpenSSL::PKey::PKeyError OpenSSL::PKCS7::RecipientInfo OpenSSL::PKCS7::SignerInfo OpenSSL::PKCS7::PKCS7Error OpenSSL::PKCS7 OpenSSL::PKCS12::PKCS12Error OpenSSL::PKCS12 OpenSSL::Netscape::SPKI OpenSSL::Netscape::SPKIError OpenSSL::HMAC OpenSSL::HMACError OpenSSL::Digest::DigestError OpenSSL::SSL::SSLContext OpenSSL::SSL::Session::SessionError OpenSSL::SSL::Session OpenSSL::SSL::SSLErrorWaitWritable OpenSSL::SSL::SSLErrorWaitReadable OpenSSL::SSL::SSLError #<Class:OpenSSL::Random> OpenSSL::Random::RandomError OpenSSL::PKey::EC::Point::Error OpenSSL::PKey::EC::Group::Error OpenSSL::PKey::EC::Point OpenSSL::PKey::EC::Group OpenSSL::PKey::EC OpenSSL::PKey::ECError OpenSSL::X509::CRL OpenSSL::X509::CRLError OpenSSL::X509::Certificate OpenSSL::X509::CertificateError OpenSSL::X509::Attribute OpenSSL::X509::AttributeError OpenSSL::SSL::SSLSocket OpenSSL::OCSP::Response OpenSSL::OCSP::Request OpenSSL::OCSP::OCSPError Pry::Command::Edit::ExceptionPatcher OpenSSL::X509::StoreContext OpenSSL::X509::Store OpenSSL::X509::StoreError OpenSSL::X509::Revoked OpenSSL::X509::RevokedError OpenSSL::X509::Request OpenSSL::X509::RequestError #<Class:OpenSSL::X509::Name::RFC2253DN> #<Class:OpenSSL::X509::Name> OpenSSL::X509::Name OpenSSL::X509::NameError OpenSSL::X509::Extension OpenSSL::ASN1::NumericString OpenSSL::ASN1::UTF8String OpenSSL::ASN1::OctetString OpenSSL::ASN1::BitString OpenSSL::ASN1::Enumerated OpenSSL::ASN1::Integer OpenSSL::ASN1::Boolean OpenSSL::ASN1::Constructive OpenSSL::ASN1::Primitive OpenSSL::ASN1::ASN1Data #<Class:OpenSSL::ASN1> OpenSSL::ASN1::ASN1Error OpenSSL::Engine::EngineError OpenSSL::Engine OpenSSL::OCSP::CertificateId OpenSSL::OCSP::SingleResponse #<Class:FFI::Pointer> FFI::Pointer CZMQ::FFI::Zlistx::DestroyedError #<Class:CZMQ::FFI::Zlistx> CZMQ::FFI::Zlistx #<Class:FFI::Platform> FFI::PlatformError Pry::Output IRuby::Session Pry::Command::Gist FFI::Type::Mapped FFI::VariadicInvoker FFI::DynamicLibrary::Symbol FFI::DynamicLibrary FFI::StructLayout::CharArray FFI::Struct::InlineArray #<Class:FFI::Struct> FFI::Struct #<class(Pry::Command "!!@")> #<Class:Pry::Config::Memoization> #<Class:CZTop::Z85::Padded> CZTop::Z85::Padded Pry::Command::ExitAll Pry::Command::InstallCommand #<Class:Pry::Config::Behavior> Pry::Config::Behavior::ReservedKeyError #<class(Pry::Command "quit")> CZMQ::FFI::Zlist::DestroyedError #<Class:CZMQ::FFI::Zlist> CZMQ::FFI::Zlist #<Class:FFI::Union> FFI::Union CZMQ::FFI::Ziflist::DestroyedError #<Class:CZMQ::FFI::Ziflist> CZMQ::FFI::Ziflist FFI::Struct::ManagedStructConverter FFI::StructLayout::Mapped FFI::StructLayout::InnerStruct FFI::StructLayout::Enum #<Class:FFI::IO> #<class(Pry::Command "file-mode")> CZTop::Config::CommentsAccessor #<class(Pry::Command /whereami[!?]+/)> Pry::Pager::PageTracker #<class(Pry::Command "@")> #<Class:Pry::Pager::SystemPager> Pry::Pager::SystemPager #<Class:Pry::Command::Whereami> Pry::Command::Whereami CZMQ::FFI::Zargs::DestroyedError #<Class:CZMQ::FFI::Zargs> CZMQ::FFI::Zargs #<Class:CZTop::Frame> CZTop::Frame #<Class:Readline> Pry::Command::Hist #<Class:Forwardable> Pry::Command::GemCd #<Class:Pry::WrappedModule::Candidate> Pry::WrappedModule::Candidate #<Class:Pry::WrappedModule> Pry::WrappedModule Pry::Command::Nesting #<class(Pry::Command "reload-method")> #<Class:CodeRay::Encoders::Encoder> CodeRay::Encoders::Encoder CZTop::Actor::DeadActorError #<Class:CZTop::Actor> CZTop::Actor CZTop::Beacon #<Class:Pry::ColorPrinter> Pry::ColorPrinter Pry::Command::ExitProgram Pry::HistoryArray #<Class:#<Pry::Config:0x00007ffdd50dcc00>> #<Class:#<Pry::Config::Default:0x00007ffdd50df0b8>> Pry::Command::Cat::FileFormatter Pry::Command::ChangeInspector #<Class:#<Class:Pry>> Pry::Command::GemList Pry::CodeFile Pry::Code::CodeRange Pry::Command::Cat::ExceptionFormatter Pry::Code::LOC #<Class:Pry::Code> Pry::Code #<Class:#<Pry::Slop:0x00007ffdd61b8ee8>> Pry::CLI::NoOptionsError #<Class:Pry::CLI> Pry::CLI Pry::Command::Cat::InputExpressionFormatter Pry::Command::Cat::AbstractFormatter Pry::Command::Cat JSON::MissingUnicodeSupport JSON::GeneratorError JSON::CircularDatastructure JSON::NestingError JSON::ParserError #<Class:JSON::JSONError> JSON::JSONError #<Class:JSON> #<Class:JSON::GenericObject> JSON::GenericObject #<Class:OpenStruct> OpenStruct Pry::Command::Ls::LsEntity Pry::Command::Ls::LocalVars #<Class:Pry::RbxPath> #<class(Pry::Command "show-method")> PP::SingleLine #<Class:PP> PP PrettyPrint::SingleLine PrettyPrint::GroupQueue PrettyPrint::Group PrettyPrint::Breakable PrettyPrint::Text #<Class:PrettyPrint> PrettyPrint #<Class:CodeRay> Pry::Command::ShowSource #<Class:Pry::Command::ShowInfo> Pry::Command::ShowInfo #<Class:Pry> Pry #<class(Pry::Command "$")> Pry::ObsoleteError Pry::MethodNotFound Pry::CommandError #<Class:Pry::FrozenObjectException> #<Class:Pry::TooSafeException> #<Class:Pry::RescuableException> StringScanner::Error StringScanner #<Class:Shellwords> #<Class:Pry::Platform> Bar Struct::Human Gem::RequestSet #<Class:TSort> TSort::Cyclic DidYouMean::SpellChecker #<Class:DidYouMean::JaroWinkler> #<Class:DidYouMean::Jaro> Gem::Resolver::Conflict IRuby::Command #<Class:MultiJson> #<Class:MultiJson::OptionsCache> Gem::Resolver::RequirementList #<Class:MultiJson::ParseError> MultiJson::ParseError #<Class:MultiJson::AdapterError> MultiJson::AdapterError Gem::Resolver::DependencyRequest Pry::Prompt #<Class:MultiJson::Version> MultiJson::Version Pry::Command::ToggleColor Gem::Resolver::Set Socket::Ifaddr #<Class:Addrinfo> Addrinfo Socket::AncillaryData Socket::Option UNIXServer UNIXSocket UDPSocket TCPServer TCPSocket IPSocket SocketError #<Class:Socket> Socket #<Class:BasicSocket> BasicSocket Pry::Command::JumpTo Pry::Command::AmendLine #<Class:Pry::Method::WeirdMethodLocator> Pry::Method::WeirdMethodLocator #<Class:#<Pry::Config:0x00007ffdd6862a28>> Pry::Command::WatchExpression::Expression #<Class:CZTop::Message> CZTop::Message #<Class:Pry::Method> Pry::Method #<Class:Pry::Helpers::DocumentationHelpers> CZTop::Poller::Event CZTop::Poller Pry::Command::WatchExpression Gem::Resolver::ComposedSet Gem::Resolver::GitSet #<Class:FileUtils::DryRun> Gem::Resolver::CurrentSet Gem::Resolver::IndexSet #<Class:IRuby::Comm> IRuby::Comm #<Class:FileUtils::NoWrite> Gem::Resolver::InstallerSet CZMQ::FFI::Zdigest::DestroyedError #<Class:CZMQ::FFI::Zdigest> CZMQ::FFI::Zdigest Pry::Command::Play Gem::Resolver::SourceSet Gem::Resolver::VendorSet Gem::Resolver::LockSpecification Gem::Resolver::LocalSpecification #<Class:IRuby::Display::Registry> #<Class:MimeMagic> MimeMagic CZMQ::FFI::Zproc::DestroyedError #<Class:CZMQ::FFI::Zproc> CZMQ::FFI::Zproc Pry::Config #<Class:Pry::Config> #<Class:Pry::BasicObject> Pry::BasicObject CZTop::Metadata::InvalidData #<Class:CZTop::Metadata> CZTop::Metadata CZMQ::FFI::Ztrie::DestroyedError #<Class:CZMQ::FFI::Ztrie> CZMQ::FFI::Ztrie CZMQ::FFI::Zhashx::DestroyedError #<Class:CZMQ::FFI::Zhashx> CZMQ::FFI::Zhashx FFI::Bitmask FFI::Enum FFI::Enums Pry::Command::GemOpen Pry::Command::ShowInput CZTop::Monitor Pry::Command::Cd CZMQ::FFI::Zloop::DestroyedError #<Class:CZMQ::FFI::Zloop> CZMQ::FFI::Zloop Pry::Editor #<Class:FFI::Library> FFI::NotFoundError CZMQ::FFI::Ztimerset::DestroyedError #<Class:CZMQ::FFI::Ztimerset> CZMQ::FFI::Ztimerset Pry::Command::Exit Pry::Command::Help Pry::ObjectPath #<Class:FFI::StrPtrConverter> FFI::StrPtrConverter #<Class:FFI> #<Class:Pry::Command::Edit::FileAndLineLocator> #<Class:SecureRandom> CZMQ::FFI::Zmsg::DestroyedError #<Class:CZMQ::FFI::Zmsg> CZMQ::FFI::Zmsg OpenSSL::Cipher::CipherError OpenSSL::Cipher OpenSSL::BN OpenSSL::BNError OpenSSL::OpenSSLError #<Class:OpenSSL> FFI::StructLayout::Array FFI::StructLayout::Function FFI::StructLayout::Pointer FFI::StructLayout::String FFI::StructLayout::Number FFI::StructLayout::Field FFI::StructLayout FFI::StructByReference FFI::StructByValue #<Class:FFI::Buffer> FFI::Buffer FFI::MemoryPointer FFI::Function FFI::FunctionType Pry::Command::FixIndent CZTop::Message::FramesAccessor Pry::Command::ImportSet Pry::Command::DisablePry #<Class:CZTop::Poller::Aggregated> CZTop::Poller::Aggregated #<Class:Pry::CodeObject> Pry::CodeObject #<Class:CodeRay::Encoders> Pry::Command::ListPrompts Pry::Command::Reset Pry::Slop::Option Pry::Command::Ls::Grep Pry::Command::Ls Human Something
1116
a = [4, 4, 2, 3]
p a.object_id
ObjectSpace._id2ref(a.object_id)
70364089831080
[4, 4, 2, 3]
o = Object.new
ObjectSpace.define_finalizer(o, proc { puts 'finalizing...'})
o = nil
GC.start
ob = Object.new
ObjectSpace.define_finalizer(ob, proc { puts 'finalizing 1...'})
ObjectSpace.define_finalizer(ob, proc { puts 'finalizing 2...'})
ObjectSpace.define_finalizer(ob, proc { raise 'finalizing 1...'})
ob = nil
GC.start
finalizing...