Ruby 检查构造函数中的变量
我正在学习ruby,并且知道在其他语言中,我可以确保初始化时变量不是空的 在这个示例中,我将如何在Ruby中实现这一点Ruby 检查构造函数中的变量,ruby,variables,constructor,Ruby,Variables,Constructor,我正在学习ruby,并且知道在其他语言中,我可以确保初始化时变量不是空的 在这个示例中,我将如何在Ruby中实现这一点 class Person attr_reader :name def initialize name @name = name end end 我相信人们会给出一些有趣且更好的答案,但这是我的 class Person attr_reader :name # By setting name = nil, we are letting init
class Person
attr_reader :name
def initialize name
@name = name
end
end
我相信人们会给出一些有趣且更好的答案,但这是我的
class Person
attr_reader :name
# By setting name = nil, we are letting initialize
# know that the parameter name may or may not be given.
def initialize(name = nil)
if name
@name = name
else
# This is what you do when the user
# did not add a name in the initializer.
@name = "No name"
end
end
end
所以如果你做类似的事情
person = Person.new
人员
将具有姓名无姓名
然而,如果你这样做
person = Person.new("Bob")
然后,person
将具有名称Bob
最后,如果将变量设置为nil,例如
name = nil
然后将name
传递到new
方法中
Person.new(name)
然后,
人
会有名字没有名字
我相信有人会给出一些有趣且更好的答案,但这是我的
class Person
attr_reader :name
# By setting name = nil, we are letting initialize
# know that the parameter name may or may not be given.
def initialize(name = nil)
if name
@name = name
else
# This is what you do when the user
# did not add a name in the initializer.
@name = "No name"
end
end
end
所以如果你做类似的事情
person = Person.new
人员
将具有姓名无姓名
然而,如果你这样做
person = Person.new("Bob")
然后,person
将具有名称Bob
最后,如果将变量设置为nil,例如
name = nil
然后将name
传递到new
方法中
Person.new(name)
然后
人
会有名字没有名字
这取决于你所说的空。如果您的意思是调用Person.new
,而不使用name
变量集,如:
a = Person.new
然后,您应该为其定义一个默认值:
def initialize( name = 'Jeffrey' )
@name = name
end
如果您指的是nil
值,则可以执行以下操作:
def initialize name
@name = (name.nil?) ? 'Jeffrey' : name
end
然后从这里我想你知道如何使用空字符串(
@name=(name=”)“Jeffrey”:name
)等等。这一切都取决于你所说的空。如果您的意思是调用Person.new
,而不使用name
变量集,如:
a = Person.new
然后,您应该为其定义一个默认值:
def initialize( name = 'Jeffrey' )
@name = name
end
如果您指的是nil
值,则可以执行以下操作:
def initialize name
@name = (name.nil?) ? 'Jeffrey' : name
end
然后从这里我想你知道如何使用空字符串(
@name=(name=”)“Jeffrey”:name
)等等。根据其他答案,IMO的最佳方法是:
def initialize(name = 'Default name')
@name = name
end
在你的评论之后
这是铁轨吗?这将改变一些事情。但您可以只检查零值:
def initialize(name)
if name.nil? || name.empty?
# raise an exception
else
@name = name
end
end
如果您使用的是Rails,也可以只使用
blank?
,它将同时选中nil?
和empty?
根据其他答案,IMO的最佳方法是:
def initialize(name = 'Default name')
@name = name
end
在你的评论之后
这是铁轨吗?这将改变一些事情。但您可以只检查零值:
def initialize(name)
if name.nil? || name.empty?
# raise an exception
else
@name = name
end
end
如果您使用的是Rails,您也可以只使用
blank?
,它将选中nil?
和empty?
,,而不设置默认名称,如果发送空字符串(而不是nil)作为参数,则会引发异常
class Person
attr_reader :name
def initialize name
raise "Name can not be an empty String" if name.empty?
@name = name
end
end
然后,如果要发送空字符串,则会出现类似以下错误:
temp.rb:5:in `initialize': Name can not be an empty String (RuntimeError)
from temp.rb:11:in `new'
from temp.rb:11:in `<main>'
shell returned 1
temp.rb:5:in'initialize':名称不能为空字符串(RuntimeError)
从临时rb:11:in‘new’
从温度rb:11:in`'
壳返回1
至于你在另一条评论中提到的“让他们输入另一个名字直到有效”部分。。。您应该让正在运行的代码执行此操作
这不允许使用默认值,但强制用户使用空字符串以外的内容
class PersonNameError < Exception
end
class Person
attr_reader :name
def initialize name
@name = name
end
end
begin
print "What is your name? "
name = gets.chomp
raise PersonNameError if name.empty?
person = Person.new(name)
rescue PersonNameError
if name.empty?
puts "You can not have a name that is ''"
retry
else
raise
end
end
puts person.name
class PersonNameError
在不设置默认名称的情况下,如果发送空字符串(而不是nil)作为参数,则可以引发异常
class Person
attr_reader :name
def initialize name
raise "Name can not be an empty String" if name.empty?
@name = name
end
end
然后,如果要发送空字符串,则会出现类似以下错误:
temp.rb:5:in `initialize': Name can not be an empty String (RuntimeError)
from temp.rb:11:in `new'
from temp.rb:11:in `<main>'
shell returned 1
temp.rb:5:in'initialize':名称不能为空字符串(RuntimeError)
从临时rb:11:in‘new’
从温度rb:11:in`'
壳返回1
至于你在另一条评论中提到的“让他们输入另一个名字直到有效”部分。。。您应该让正在运行的代码执行此操作
这不允许使用默认值,但强制用户使用空字符串以外的内容
class PersonNameError < Exception
end
class Person
attr_reader :name
def initialize name
@name = name
end
end
begin
print "What is your name? "
name = gets.chomp
raise PersonNameError if name.empty?
person = Person.new(name)
rescue PersonNameError
if name.empty?
puts "You can not have a name that is ''"
retry
else
raise
end
end
puts person.name
class PersonNameError
为什么不接受构造函数/初始化方法中的用户名
def initialize name
begin
while name.empty?
puts "You can not have a name that is ''"
print "What is your name? "
name = gets.chomp
end
@name = name
end
end
为什么不接受构造函数/初始化方法中的用户名
def initialize name
begin
while name.empty?
puts "You can not have a name that is ''"
print "What is your name? "
name = gets.chomp
end
@name = name
end
end
您的意思是要提供默认值吗?如果传递了
nil
,则引发异常。。。你能说得更具体一点吗?@LoganSerman我不想要默认值,我知道怎么做。我想知道你是否传入“”而不是“Paul”如何捕获该异常,并让用户重新输入该值,直到他们输入有效的内容。如果参数无效,请输入错误。@DaveNewton我对Ruby还是很陌生,是否有办法引发错误,让用户更正错误,而不使程序崩溃?您的意思是要提供默认值吗?如果传递了nil
,则引发异常。。。你能说得更具体一点吗?@LoganSerman我不想要默认值,我知道怎么做。我想知道你是否传入“”而不是“Paul”,如何捕获该异常,并让用户重新输入该值,直到他们输入有效的值。如果参数无效,请输入错误。@DaveNewton我对Ruby还是很陌生,有没有办法