2015-09-10 7 views
5

は、私はほとんどすべてがRubyでオブジェクトがどのようにブログ記事を書いている、と私は、次の例を介してこれを表示するようにしようとしている:クラスのインスタンスメソッドを呼び出すと、メソッドとして初期化されないのはなぜですか?

class CoolBeans 
    attr_accessor :beans 

    def initialize 
    @bean = [] 
    end 

    def count_beans 
    @beans.count 
    end 

end 

だから、クラスを見てから、私たちはそれを持って言うことができます4つのメソッド(もちろん、私が間違っている場合を除き):新しいインスタンスが

  • を作成したとき

    1. それはそれはそれはそれはでき
    2. を持っているどのように多くの豆数えることができる豆のデフォルトの空の配列を初期化することができますそれが持っていた豆の数を( attr_accessor
    3. それは私がそれを持っているもの、インスタンスメソッド、クラス自身に尋ねるとき、私は見ていない、しかし)もattr_accessorを通じて空の配列(へ)

    をより多くの豆を書く(または追加することができますデフォルトinitialize方法:

    CoolBeans.new.class.instance_methods 
    # => [:beans, :beans=, :count_beans, :lm, :lim, :nil?, :===, :=~, :!~, :eql?, :hash, :<=>, :class, :singleton_class, :clone, :dup, :itself, :taint, :tainted?, :untaint, :untrust, :untrusted?, :trust, :freeze, :frozen?, :to_s, :inspect, :methods, :singleton_methods, :protected_methods, :private_methods, :public_methods, :instance_variables, :instance_variable_get, :instance_variable_set, :instance_variable_defined?, :remove_instance_variable, :instance_of?, :kind_of?, :is_a?, :tap, :send, :public_send, :respond_to?, :extend, :display, :method, :public_method, :singleton_method, :define_singleton_method, :object_id, :to_enum, :enum_for, :==, :equal?, :!, :!=, :instance_eval, :instance_exec, :__send__, :__id__] 
    

    これはinitializeメソッドがインスタンスメソッドではないことを意味するのでしょうか?そうでない場合は、それがクラスCoolBeansで利用可能なメソッドとして表示されないのはなぜですか?

  • +3

    インスタンス変数にエラーがあります。 –

    +1

    3と4に関して:正確に言えば、 'attr_accessor'は配列の検査や操作とは関係ありません。 '@ beans'に割り当てられたオブジェクトを返すインスタンスメソッド' beans'と '@ beans'に新しいオブジェクトを割り当てる' beans = 'メソッドを作成します。 – Stefan

    +0

    ありがとう - 私はそれを変更します。 – Becca

    答えて

    9

    instance_methods公共保護メソッドの配列を返します。ただし、initializeは自動的にとなります。refです。

    CoolBeans.private_instance_methods 
    # => [:initialize, :default_src_encoding, :irb_binding, :initialize_copy, :initialize_dup, :initialize_clone, :sprintf, :format, :Integer, :Float, :String, :Array, :Hash, :warn, :raise, :fail, :global_variables, :__method__, :__callee__, :__dir__, :eval, :local_variables, :iterator?, :block_given?, :catch, :throw, :loop, :respond_to_missing?, :trace_var, :untrace_var, :at_exit, :syscall, :open, :printf, :print, :putc, :puts, :gets, :readline, :select, :readlines, :`, :p, :test, :srand, :rand, :trap, :load, :require, :require_relative, :autoload, :autoload?, :proc, :lambda, :binding, :caller, :caller_locations, :exec, :fork, :exit!, :system, :spawn, :sleep, :exit, :abort, :Rational, :Complex, :set_trace_func, :gem, :gem_original_require, :singleton_method_added, :singleton_method_removed, :singleton_method_undefined, :method_missing] 
    #  ^^^^^^^^^^^ 
    
    +0

    あなたの助けてくれてありがとう!必要ならば、私のブログhttp://beccaades.github.io/blog/2015/09/10/back-to-basics-how-everything-really-is-an-object-in-ruby/をチェックしてください。 – Becca

    +0

    ありがとう!大変感謝しています:) – Becca

    +0

    私が値falseを渡すと、私は全くメソッドを取得しません...継承されたメソッドを除外するが、インスタンスメソッドを保持する方法はありますか? – Becca

    関連する問題