This page contains automated test results for code from O'Reilly's Ruby Cookbook. If this code looks interesting or useful, you might want to buy the whole book.
Controlling Access by Making Methods Private | ||
---|---|---|
Code | Expected | Actual |
class SecretNumber def initialize @secret = rand(20) end def hint puts "The number is #{"not " if secret <= 10}greater than 10." end private def secret @secret end end s = SecretNumber.new s.secret |
NoMethodError: private method `secret' called for #<SecretNumber:0xb7c2e83c @secret=19> |
Error! (Exception?) Here's stdout: NoMethodError: private method `secret' called for #<SecretNumber:0xb7c28a24 @secret=19> from (irb):14 |
s.hint |
The number is greater than 10. |
The number is greater than 10. |
class LessSecretNumber < SecretNumber def hint lower = secret-rand(10)-1 upper = secret+rand(10)+1 "The number is somewhere between #{lower} and #{upper}." end end ls = LessSecretNumber.new ls.hint |
"The number is somewhere between -3 and 16." | "The number is somewhere between -3 and 16." |
ls.hint |
"The number is somewhere between -1 and 15." | "The number is somewhere between -1 and 15." |
ls.hint |
"The number is somewhere between -2 and 16." | "The number is somewhere between -2 and 16." |
class MyClass def public_method1 end def public_method2 end protected def protected_method1 end private def private_method1 end def private_method2 end end class LessSecretNumber def compare(other) if secret == other.secret comparison = "equal to" else comparison = secret > other.secret ? "greater than" : "less than" end "This secret number is #{comparison} the secret number you passed in." end end a = LessSecretNumber.new b = LessSecretNumber.new a.hint |
"The number is somewhere between 17 and 22." | "The number is somewhere between 17 and 22." |
b.hint |
"The number is somewhere between 0 and 12." | "The number is somewhere between 0 and 12." |
a.compare(b) |
NoMethodError: private method `secret' called for #<LessSecretNumber:0xb7bfe13c @secret=6> |
Error! (Exception?) Here's stdout: NoMethodError: private method `secret' called for #<LessSecretNumber:0xb7bf8374 @secret=6> from (irb):43:in `compare' from (irb):55 |
class SecretNumber protected :secret end a.compare(b) |
"This secret number is greater than the secret number you passed in." | "This secret number is greater than the secret number you passed in." |
b.compare(a) |
"This secret number is less than the secret number you passed in." | "This secret number is less than the secret number you passed in." |
class MethodWithManySecrets :private # This method will show up in the RDoc, even though it's private. def secret_method_1 end # This method will not show up in the RDoc. def secret_method_2 # :nodoc: end end s.send(:secret) |
19 | 19 |