1

私はルビーを学んでおり、他の言語では初期化時に変数が空でないことを確認できることを知っています。

この例でRubyでこれを行うにはどうすればよいですか?

class Person
  attr_reader :name

  def initialize name 
    @name = name
  end
end
4

5 に答える 5

1

デフォルト名を設定せずに、空の文字列 (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
于 2013-05-13T02:38:53.317 に答える
0

私はいくつかの興味深い、より良い答えを投げる人がいると確信していますが、ここに私のものがあります.

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

次に、namenewメソッドに渡します

Person.new(name)

person名前を持ちますNo name

于 2013-05-13T01:47:11.203 に答える
0

それはすべて、空の意味に依存します。次のように変数を設定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ここから、空の文字列( )などを使用する方法を知っていると思います。

于 2013-05-13T01:47:58.750 に答える