我是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中。除了简单的美学外,这也影响事物的解决顺序。 –