私はルビーを学んでおり、他の言語では初期化時に変数が空でないことを確認できることを知っています。
この例でRubyでこれを行うにはどうすればよいですか?
class Person
attr_reader :name
def initialize name
@name = name
end
end
私はルビーを学んでおり、他の言語では初期化時に変数が空でないことを確認できることを知っています。
この例でRubyでこれを行うにはどうすればよいですか?
class Person
attr_reader :name
def initialize name
@name = name
end
end
デフォルト名を設定せずに、空の文字列 (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
別のコメントで述べたように、「有効になるまで別の名前を入力させる」の部分に関しては...実行中のコードにこれを実行させる必要があります。
これはデフォルトを許可していませんが、ユーザーに空の文字列以外のものを使用することを強制しています。
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 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
は名前が付けられNo name
ます。
ただし、そうする場合
person = Person.new("Bob")
その後person
、名前が付けられBob
ます。
最後に、変数を nil として設定した場合、たとえば
name = nil
次に、name
をnew
メソッドに渡します
Person.new(name)
はperson
名前を持ちますNo 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
ここから、空の文字列( )などを使用する方法を知っていると思います。