这是代码,但其中很多都是无关紧要的:
class BankAccount
def initialize(first_name, last_name)
@first_name = first_name
@last_name = last_name
@balance = 0
end
def public_deposit(amount)
@balance += amount
end
def protected_deposit(amount)
@balance += amount
end
protected :protected_deposit
def private_deposit(amount)
@balance += amount
end
private :private_deposit
def call_private_deposit(amount)
private_deposit(amount)
end
def call_protected_deposit(amount)
protected_deposit(amount)
end
#To show that you can't call a private method with a different instance of the same class.
def private_add_to_different_account(account, amount)
account.private_deposit(amount)
end
#To show that you can call a protected method with a different instance of the same class.
def protected_add_to_different_account(account, amount)
account.protected_deposit(amount)
end
end
我使用“load'./visibility.rb'”将此代码加载到irb中,然后创建一个实例:
an_instance = BankAccount.new("Joe", "Bloggs")
然后,我输入以下内容生成NoMethodError:
an_instance.protected_deposit(1000)
这将返回NoMethodError。这是故意的。但是,我想要发生的是返回自定义消息而不是标准的NoMethodError - 类似于“这是一个自定义错误消息。”
我已经在这里乱砍了几个小时而且我的智慧结束了。我是一个相对初学者,所以请记住这一点。
感谢。
答案 0 :(得分:0)
您可以解决错误:
def call_protected_method
instance = BankAccount.new("Joe", "Bloggs")
instance.protected_deposit(1000)
rescue NoMethodError
puts "You called a protected method"
end
如果要返回自定义消息,可以解决错误并引发自己的自定义异常。 Ruby允许您定义自己的异常类。但我无法想象你为什么要这样做。你已经有一个内置的例外来处理这个问题。