Ruby 检查是否已分配属性的测试失败
我正在做一些练习。每个练习都附带一套我们需要通过的预先编写的测试。我目前正在处理的问题要求我们编写一个机器人类。每个机器人都应该有一个名为name的方法来设置默认名称。我是这样做的:Ruby 检查是否已分配属性的测试失败,ruby,regex,Ruby,Regex,我正在做一些练习。每个练习都附带一套我们需要通过的预先编写的测试。我目前正在处理的问题要求我们编写一个机器人类。每个机器人都应该有一个名为name的方法来设置默认名称。我是这样做的: class Robot attr_accessor :name def self.name @name = DateTime.now.strftime("%y%^b%k%M%S") @name end end class Robot def initialize @na
class Robot
attr_accessor :name
def self.name
@name = DateTime.now.strftime("%y%^b%k%M%S")
@name
end
end
class Robot
def initialize
@name = DateTime.now.strftime("%y%^b%k%M%S")
end
end
Robot.new.name
#=> "15MAY150035"
问题是第一次测试(我现在跳过其余的测试)总是失败。以下是测试:
def test_has_name
# rubocop:disable Lint/AmbiguousRegexpLiteral
assert_match /^[A-Z]{2}\d{3}$/, Robot.new.name
# rubocop:enable Lint/AmbiguousRegexpLiteral
end
我没有使用rubocopgem,所以我保留了注释行。测试失败,出现以下错误:
1) Failure:
RobotTest#test_has_name [robot-name/robot_name_test.rb:7]:
Expected /^[A-Z]{2}\d{3}$/ to match nil.
我想最大的问题是我并不真正理解这个错误,我不知道我是否需要安装rubocop,并且取消注释上面或我的代码中的那些行是完全错误的。在此方面的任何帮助都将不胜感激 您的代码存在许多问题 首先,定义访问器
:name
,但没有初始化方法
您所定义的是一个类方法name
,如果您调用Robot.name
,它将起作用
为了让你的课堂发挥作用,它应该是这样的:
class Robot
attr_accessor :name
def self.name
@name = DateTime.now.strftime("%y%^b%k%M%S")
@name
end
end
class Robot
def initialize
@name = DateTime.now.strftime("%y%^b%k%M%S")
end
end
Robot.new.name
#=> "15MAY150035"
或者你会这么做
class Robot
def name
DateTime.now.strftime("%y%^b%k%M%S")
end
end
Robot.new.name
#=> "15MAY150649"
此外,在Ruby中,方法中的最后一行已经是返回的内容,所以您不必在此处写入@name
:
def self.name
@name = DateTime.now.strftime("%y%^b%k%M%S")
@name # useless
end
此外,变量@name
在这里是无用的,因为方法name
无论哪种方式都将返回DateTime
对象
您必须确保理解Ruby中的内容。您的代码存在许多问题
首先,定义访问器:name
,但没有初始化方法
您所定义的是一个类方法name
,如果您调用Robot.name
,它将起作用
为了让你的课堂发挥作用,它应该是这样的:
class Robot
attr_accessor :name
def self.name
@name = DateTime.now.strftime("%y%^b%k%M%S")
@name
end
end
class Robot
def initialize
@name = DateTime.now.strftime("%y%^b%k%M%S")
end
end
Robot.new.name
#=> "15MAY150035"
或者你会这么做
class Robot
def name
DateTime.now.strftime("%y%^b%k%M%S")
end
end
Robot.new.name
#=> "15MAY150649"
此外,在Ruby中,方法中的最后一行已经是返回的内容,所以您不必在此处写入@name
:
def self.name
@name = DateTime.now.strftime("%y%^b%k%M%S")
@name # useless
end
此外,变量@name
在这里是无用的,因为方法name
无论哪种方式都将返回DateTime
对象
您必须确保理解Ruby中的内容。您的代码存在许多问题
首先,定义访问器:name
,但没有初始化方法
您所定义的是一个类方法name
,如果您调用Robot.name
,它将起作用
为了让你的课堂发挥作用,它应该是这样的:
class Robot
attr_accessor :name
def self.name
@name = DateTime.now.strftime("%y%^b%k%M%S")
@name
end
end
class Robot
def initialize
@name = DateTime.now.strftime("%y%^b%k%M%S")
end
end
Robot.new.name
#=> "15MAY150035"
或者你会这么做
class Robot
def name
DateTime.now.strftime("%y%^b%k%M%S")
end
end
Robot.new.name
#=> "15MAY150649"
此外,在Ruby中,方法中的最后一行已经是返回的内容,所以您不必在此处写入@name
:
def self.name
@name = DateTime.now.strftime("%y%^b%k%M%S")
@name # useless
end
此外,变量@name
在这里是无用的,因为方法name
无论哪种方式都将返回DateTime
对象
您必须确保理解Ruby中的内容。您的代码存在许多问题
首先,定义访问器:name
,但没有初始化方法
您所定义的是一个类方法name
,如果您调用Robot.name
,它将起作用
为了让你的课堂发挥作用,它应该是这样的:
class Robot
attr_accessor :name
def self.name
@name = DateTime.now.strftime("%y%^b%k%M%S")
@name
end
end
class Robot
def initialize
@name = DateTime.now.strftime("%y%^b%k%M%S")
end
end
Robot.new.name
#=> "15MAY150035"
或者你会这么做
class Robot
def name
DateTime.now.strftime("%y%^b%k%M%S")
end
end
Robot.new.name
#=> "15MAY150649"
此外,在Ruby中,方法中的最后一行已经是返回的内容,所以您不必在此处写入@name
:
def self.name
@name = DateTime.now.strftime("%y%^b%k%M%S")
@name # useless
end
此外,变量@name
在这里是无用的,因为方法name
无论哪种方式都将返回DateTime
对象
您必须确保理解Ruby中的内容。您的代码将名称定义为Robot
类上的方法(这就是self
所指示的;这里将在类对象上设置成员变量)。您需要为每个实例提供一个名称
其次,每次调用name
时,方法都会更改名称。您可能希望设置它一次(当robot是初始化d时,可能!),然后每次都返回该值。您的代码将名称定义为robot
类上的一个方法(这是self
指示的;并且@name
这里将在类对象上设置一个成员变量)。您需要为每个实例提供一个名称
其次,每次调用name
时,方法都会更改名称。您可能希望设置它一次(当robot是初始化d时,可能!),然后每次都返回该值。您的代码将名称定义为robot
类上的一个方法(这是self
指示的;并且@name
这里将在类对象上设置一个成员变量)。您需要为每个实例提供一个名称
其次,每次调用name
时,方法都会更改名称。您可能希望设置它一次(当robot是初始化d时,可能!),然后每次都返回该值。您的代码将名称定义为robot
类上的一个方法(这是self
指示的;并且@name
这里将在类对象上设置一个成员变量)。您需要为每个实例提供一个名称
其次,每次调用name
时,方法都会更改名称。您可能希望设置它一次(当robot是初始化d时,可能!),然后每次都返回该值。您的方法是类方法。这意味着Robot.name
将为您提供名称,而Robot.new.name
为nil
您要使用:
def name
#code
end
而不是self.name
您还可以在初始化方法中设置名称:
def initialize
@name = 'RB123'
end
您的方法是类方法。这意味着机器人。