как вернуть true или false в методе в ruby?

#ruby #macos #methods #return

#ruby #macos #методы #Возврат

Вопрос:

Мне нужно найти ключ в хэше, затем вернуть true, если этот ключ уже существует, или false, если он не существует, но по какой-то причине у меня ошибка в терминале. это мой метод:

 def key_no_exist (hash,key)
hash.each do |clave,valor|
  if clave == key
    return false
  end
end
 return true
 

завершение

и после того, как я использую этот возврат в этом коде:

         when "set"
        key = sep[1] #string who contain my key
        client.puts "SEND DATABLOCK:  "
        resp = client.gets.chomp
        datablock = resp.scan(/w /)
        if key_no_exist(data,key) #if the key doesn't exist, add the data block into the hash
          data[:key] = datablock
          client.puts"STORED: rn "
        else
          client.puts "CLIENT_ERROR [key already exists]rn"
        end
 

в конце концов, когда я запускаю код в терминале, я эту проблему:
:22: предупреждение: назначенная, но неиспользуемая переменная — данные

:75: предупреждение: круглые скобки после имени метода интерпретируются как список аргументов, а не разложенный аргумент

в block (2 levels) in run':undefined local variable or method data’ для #Server:0x00007fdd0695d8d8 (ошибка имени)

сначала я создаю хэш с именем data:

 class Server
def initialize(port,ip)
  @server = TCPServer.open(ip,port)
  @connections = Hash.new
  @clients = Hash.new
  @connections[:server] = @server
  @connections[:clients] = @clients
  data = Hash.new

  run
end
 

Комментарии:

1. Почему бы просто не использовать has_key?

Ответ №1:

Я думаю, вы путаете синтаксис объявления метода и синтаксис вызова метода. Ваше объявление метода def key_no_exist(data,key) в порядке, этот метод ожидает два аргумента, первый — это хэш, второй — ключ. Когда вы затем вызываете этот метод, вам нужно передать фактический хэш и фактический ключ, который вы проверяете. Я не уверен, какая из ваших переменных ( client resp или что-то еще) является хэшем, но скажите, что она вызвана your_hash , вы вызовете этот метод if key_no_exist(your_hash, key) следующим образом.

Ошибка, которую вы получаете undefined local variable or method data , говорит о том, что переменная не вызывается data , т. Е. Ее нет data = something .

Что касается фактического метода, который вы используете, ruby поставляется с хэш-методом .has_key? , который возвращает true, если ключ есть, else возвращает false . Поэтому вместо того, чтобы писать свой собственный метод, вы могли бы просто сделать что-то вроде if your_hash.has_key?(key) .