attr_writer\uff1a\u4ee3\u8868\u9019\u4e9b instance variables \u53ea\u6709\u5ba3\u544a setter<\/li><\/ul>\n\n\n\n\u7576\u6709\u591a\u500b instance variables \u8981\u653e\u5728 attr \u88e1\u6642\uff0c\u53ef\u4ee5\u7528 , \u9694\u958b\uff0cex:\nattr_accessor :name, :age<\/pre>\n\n\n\nclass TeamMember\n attr_accessor :name\n attr_reader :age\n attr_writer :city\n\n def initialize(name, age, city)\n @name = name\n @age = age\n @city = city\n end\n\nend\n\nmember1 = TeamMember.new(\"Jimmy\", 25, \"Taipei\")\np member1.name\n# \"Jimmy\"\nmember1.name = \"Sam\"\n\np member1.age\n# 25\nmember1.age = 30\n# undefined method `age=' for #<TeamMember:0x0000000102a39d20 @name=\"Sam\", @age=25, @city=\"Taipei\"> \n\np member1.city\n# undefined method `city' for #<TeamMember:0x0000000100d5de40 @name=\"Sam\", @age=25, @city=\"Taipei\">\nmember1.city = \"Yilan\"\n<\/code><\/pre>\n\n\n\n<\/span>2.2 Class Variables<\/span><\/h3>\n\n\n\nClass variables \u5b58\u5728\u65bc class \u4e0a\uff0c\u4e5f\u5c31\u662f\u8aaa\u6240\u6709\u5f9e\u9019\u500b class \u5efa\u7acb\u7684 object instance \u5171\u7528 class variables\u3002<\/p>\n\n\n\n
class variables \u7528 @@ \u8868\u793a\uff1a<\/p>\n\n\n\n
class TeamMember\n @@count = 0\n\n def initialize(name)\n @name = name\n @@count += 1\n end\n\n # getter method of class variables\n def count\n @@count\n end\nend\n\nmember1 = TeamMember.new(\"Jimmy\")\nmember2 = TeamMember.new(\"Sam\")\nmember3 = TeamMember.new(\"Eric\")\n\np member1.count\n# 3<\/code><\/pre>\n\n\n\nattr_accessor, attr_reader, attr_writer \u53ea\u9069\u7528\u65bc instance variables\uff0c\u4e0d\u9069\u7528\u65bc class variables\uff0c\u56e0\u6b64\u8981\u5b58\u53d6\u6216\u4fee\u6539 class variables \u9700\u8981\u7528\u4e00\u822c getter \u548c setter \u7684\u5beb\u6cd5<\/pre>\n\n\n\n<\/span>3. Methods<\/span><\/h2>\n\n\n\n<\/span>3.1 Instance methods<\/span><\/h3>\n\n\n\n\u53ea\u8981\u5728 class \u4e2d\u7528\u4e00\u822c\u7684\u65b9\u5f0f\u5ba3\u544a methods\uff0c\u5373\u70ba instance methods\u3002Instance methods \u6709\u5169\u500b\u7279\u6027\uff1a<\/p>\n\n\n\n
- \u53ea\u80fd\u5728\u5df2\u7d93\u5efa\u7acb\u7684 object instance \u4e0a\u57f7\u884c<\/li>
- \u7121\u6cd5\u76f4\u63a5\u5728 class \u4e0a\u57f7\u884c<\/li><\/ul>\n\n\n\n
\u53ea\u6709\u88ab\u5efa\u7acb\u7684 object instance \u53ef\u4ee5\u57f7\u884c\uff0c\u7121\u6cd5\u76f4\u63a5\u5728 class \u4e0a\u57f7\u884c\uff1a<\/p>\n\n\n\n
class TeamMember\n\n def initialize(name, age)\n @name = name\n @age = age\n end\n\n def description\n p \"#{@name} is #{@age} years old\"\n end\nend\n\nmember1 = TeamMember.new(\"Jimmy\", 25)\nmember1.description\n# \"Jimmy is 25 years old\"\nTeamMember.description\n# undefined method `description' for TeamMember:Class<\/code><\/pre>\n\n\n\n<\/span>3.2 Class Methods<\/span><\/h3>\n\n\n\n\u53ea\u8981\u5728\u4e00\u822c method \u7684\u540d\u5b57\u524d\u9762\u52a0\u4e0a self.\uff0c\u5373\u70ba class methods\u3002Class methods \u7684\u7279\u6027\u548c instance methods \u76f8\u53cd\uff1a<\/p>\n\n\n\n
- \u7121\u6cd5\u5728\u5df2\u7d93\u5efa\u7acb\u7684 object instance \u4e0a\u57f7\u884c<\/li>
- \u53ea\u80fd\u5728 class \u4e0a\u57f7\u884c<\/li><\/ul>\n\n\n\n
class TeamMember\n\n def initialize(name, age)\n @name = name\n @age = age\n end\n\n def self.description\n p \"this is the class method\"\n end\nend\n\nmember1 = TeamMember.new(\"Jimmy\", 25)\n\nmember1.description\n# undefined method `description' for #<TeamMember:0x0000000104cc6550 @name=\"Jimmy\", @age=25>\nTeamMember.description\n# \"this is the class method\"<\/code><\/pre>\n\n\n\n<\/span>4. Public, Private, Protected<\/span><\/h2>\n\n\n\nPublic, Private, Protected \u662f\u7528\u4f86\u6c7a\u5b9a class \u88e1 methods \u7684\u5b58\u53d6\u6b0a\u9650\uff0c\u5982\u679c\u6c92\u6709\u7279\u5225\u6307\u5b9a\u7684\u8a71\uff0c\u5b9a\u7fa9\u7684 methods default \u70ba public\u3002<\/p>\n\n\n\n
<\/span>4.1 Public<\/span><\/h3>\n\n\n\n\u53ea\u8981\u6c92\u6709\u7279\u5225\u6307\u5b9a\u7684\u8a71\uff0c\u5728 class \u5167\u5ba3\u544a\u7684 methods \u90fd\u662f public\uff0c\u53ef\u4ee5\u5728 class \u5167\u90e8\u6216\u662f\u5916\u90e8 ( \u5efa\u7acb instance object \u5f8c ) \u88ab\u57f7\u884c\uff1a<\/p>\n\n\n\n
class DemoClass\n def public_method\n p \"I am a public method\"\n end\n\n # \u53ef\u4ee5\u5728 class \u5167\u90e8\u57f7\u884c public methods\n def public_method_call_by_class\n public_method\n end\nend\n\ndemoInstance = DemoClass.new\n\n# \u53ef\u4ee5\u5728 class \u5916\u90e8\u57f7\u884c public methods\ndemoInstance.public_method\n# \"I am a public method\"\ndemoInstance.public_method_call_by_class\n# \"I am a public method\"<\/code><\/pre>\n\n\n\n<\/span>4.2 Private<\/span><\/h3>\n\n\n\n<\/span>4.2.1 \u5ba3\u544a private methods<\/span><\/h4>\n\n\n\nprivate methods \u548c public methods \u6700\u5927\u7684\u5dee\u5225\u5728\u65bc private methods \u53ea\u80fd\u5728 class \u5167\u90e8\u57f7\u884c\uff0c\u5728\u9019\u4e4b\u524d\u5148\u4f86\u8aac\u8aaa private methods \u7684\u5ba3\u544a\u65b9\u5f0f\uff1a<\/p>\n\n\n\n
- \u5beb\u5728 methods \u524d\u9762\uff1a\u5728 class \u5167\u90e8\u4e00\u65e6\u51fa\u73fe private\uff0c\u5247 private \u5f8c\u6240\u6709\u5ba3\u544a\u7684 methods \u7686\u70ba private methods\uff1a<\/li><\/ol>\n\n\n\n
class DemoClass\n private\n def private_method_1\n p \"I am private method 1\"\n end\n\n def private_method_2\n p \"I am private method 2\"\n end\nend\n\ndemoInstance = DemoClass.new\n\ndemoInstance.private_method_1\n# NoMethodError\ndemoInstance.private_method_2\n# NoMethodError<\/code><\/pre>\n\n\n\n- \u5beb\u5728 class \u5167\u90e8\u7684\u6700\u5f8c<\/li><\/ol>\n\n\n\n
class DemoClass\n def private_method_1\n p \"I am private method 1\"\n end\n\n def private_method_2\n p \"I am private method 2\"\n end\n\n private :private_method_1, :private_method_2\nend\n\ndemoInstance = DemoClass.new\n\ndemoInstance.private_method_1\n# NoMethodError\ndemoInstance.private_method_2\n# NoMethodError<\/code><\/pre>\n\n\n\n<\/span>4.2.2 \u53ef\u4ee5\u5728 class \u5167\u90e8\u88ab\u5176\u4ed6 methods \u57f7\u884c<\/span><\/h4>\n\n\n\n\u8aa0\u5982\u4e0a\u9762\u63d0\u5230\u7684\uff0cprivate methods \u53ea\u80fd\u5728 class \u5167\u90e8\u88ab\u5176\u4ed6 methods \u57f7\u884c\uff0c\u7121\u6cd5\u5728 object instance \u4e0a\u76f4\u63a5\u57f7\u884c\uff1a<\/p>\n\n\n\n
class DemoClass\n def private_method_call_by_class\n private_method\n end\n\n private\n def private_method\n p \"I am a private method\"\n end\nend\n\ndemoInstance = DemoClass.new\n\ndemoInstance.private_method\n# NoMethodError\ndemoInstance.private_method_call_by_class\n# \"I am a private method\"<\/code><\/pre>\n\n\n\n<\/span>4.2.3 \u53ef\u4ee5\u88ab\u7e7c\u627f\u7684 class \u5167\u90e8\u57f7\u884c<\/span><\/h4>\n\n\n\nRuby \u7684 private methods \u548c\u5176\u4ed6\u7a0b\u5f0f\u8a9e\u8a00\u6bd4\u8f03\u4e0d\u4e00\u6a23\uff0c\u53ef\u4ee5\u88ab\u7e7c\u627f\u7684 class \u6240\u57f7\u884c\uff1a<\/p>\n\n\n\n
class DemoClass\n def private_method_call_by_class\n private_method\n end\n\n private\n def private_method\n p \"I am a private method\"\n end\nend\n\n# < \u7b26\u865f\u70ba\u7e7c\u627f\uff0c\u6703\u7e7c\u627f < \u53f3\u908a\u7684 class\nclass ChildClass < DemoClass\n def private_method_call_by_child_class\n private_method\n end\nend\n\nchildInstance = ChildClass.new\n\nchildInstance.private_method_call_by_child_class\n# \"I am a private method\"<\/code><\/pre>\n\n\n\n