我是Ruby新手,正在嘗試使用Ruby中的前幾個程序來理解這些概念。現在,在嘗試基礎知識時,我在Class Method概念中遇到了以下問題。
我有一個類方法「Servers.valid_requestor」。
這應該檢查提供的用戶名是否基於我使用的預定義用戶名是否有效,如果是,則應該執行main中的某段代碼。
現在,這裏的問題是,每當我試圖通過使用myInput.user_name來獲取用戶名,它返回未定義的方法USER_NAME的my_input對象(NoMethodError)Ruby中的類方法
in `validRequestor': undefined method `user_name' for #Object (NoMethodError)
class Servers
# Constructor
def initialize(user_name, ip_address, host_name)
@user_name = user_name
@ip_address = ip_address
@host_name = host_name
end
# Class Method
def Servers.valid_requestor(my_input)
user_name = my_input.user_name
return user_name.to_s == "myUserName"
end
# Member function
def print
puts "I am in super"
my_details = "Details: #{@user_name} -- #{@ip_address} -- #{@host_name}"
end
end
# MAIN
a_server = Servers.new("myUserName", "10.20.30.40", "server1.mydomain.private")
if (Servers.valid_requestor(a_server))
my_details = a_server.print
puts my_details
<do something>
end
如果我添加方法如下在Servers類中,問題解決,因爲我相信myInput.userName查找方法。
def user_name
@user_name
end
但我可以得到一些指針,爲什麼我需要這種方法。我想知道如何在內部調用這樣的工作,當你打電話像my_input.user_name
我試圖得到一些關於類方法的詳細文檔,但在大多數情況下,這些都是用一些非常簡單的例子像一些puts語句解釋的。如果任何人都可以在類方法中解釋類方法和訪問變量,對象等,這將非常有用。我看到類似"undefined method" error ruby中提到的答案,這給了我解決問題的想法,但我需要更多關於內部工作方式的更多細節。任何指針都會有幫助。
在Ruby中,只有常量(類,模塊,實際常量)應該在CamelCase中。所有其他名稱的東西(方法,變量,參數,實例變量,...)通常都在snake_case中。除了簡單的美學外,這也影響事物的解決順序。 –