【问题标题】:how return true or false in a method in ruby?如何在 ruby​​ 的方法中返回 true 或 false?
【发布时间】:2021-05-17 02:01:14
【问题描述】:

我需要在哈希中找到一个键,然后如果该键已经存在则返回 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: \r\n "
        else
          client.puts "CLIENT_ERROR [key already exists]\r\n"
        end

毕竟当我在终端中运行代码时,我遇到了这个问题: :22: 警告:已分配但未使用的变量 - 数据

:75: 警告:方法名称后的括号被解释为参数列表,而不是分解的参数

block (2 levels) in run':undefined local variable or method data' 中为#Server:0x00007fdd0695d8d8 (NameError)

首先我创建一个名为 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

【问题讨论】:

标签: ruby macos methods return


【解决方案1】:

我认为您混淆了方法声明语法和方法调用语法。你的方法声明def key_no_exist(data,key) 很好,这个方法需要两个参数,第一个是哈希,第二个是键。然后,当您调用此方法时,您需要传入实际的哈希值和您正在检查的实际密钥。我不确定您的哪个变量(clientresp 或其他)是哈希,但说它称为 your_hash,您将调用此方法,如if key_no_exist(your_hash, key)

您收到的错误undefined local variable or method data 是说没有名为data 的变量,即没有data = something

至于您使用的实际方法,ruby 带有一个哈希方法.has_key?,如果密钥存在则返回 true,否则返回 false。因此,与其编写自己的方法,不如执行if your_hash.has_key?(key) 之类的操作。

【讨论】:

    猜你喜欢
    • 2012-02-21
    • 1970-01-01
    • 2012-06-24
    • 1970-01-01
    • 2017-09-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多