在`_main'中:nil的未定义方法`run':NilClass(NoMethodError)

问题描述 投票:0回答:1

我无法在名为 MySqliteRequest 的类中调用 run 方法。当我调用该方法时,错误消失了。

in `main': undefined method `run' for nil:NilClass (NoMethodError)

这里有一些方法

MySqliteRequest

class MySqliteRequest
    def print
        puts "Type Of Request #{@type_of_request}"
    end

    def run
        print
    end

    def _setTypeOfRequest(new_type)
        if(@type_of_request == :none or @type_of_request == new_type)
            @type_of_request = new_type
        else
            raise "Invalid: type of request already set #{@type_of_request} (new type => #{new_type}"
        end
    end
end

以及主要方法↓

def _main()
   request = MySqliteRequest.new
   request = request.from('nba_player_data.csv')
   request = request.select('name')
   request = request.where('birth_state', 'Indiana')
   request.run
end
_main()
ruby-on-rails ruby
1个回答
0
投票

在调用

request.run
时,
request
的值为
nil
。这就是您看到错误的原因。
发生这种情况是因为它上面的行将
nil
值分配给
request
变量。

从你格式化事物的方式来看,你显然来自另一种不是 Ruby 的语言(也许是某种类型的 C?)。它将帮助您更加熟悉 Ruby 及其习惯用法。然而,据我所知,你想做这样的事情:

def _main
   request = MySqliteRequest.new
   request.from('nba_player_data.csv')
   request.select('name')
   request.where('birth_state', 'Indiana')
   request.run
end
_main()

这假设您还在您的

MySqliteRequest
对象或模型上定义了(并且在某些情况下可能覆盖)这些方法:
from

select

where

但是,请注意,您的处理方式完全违背了 Ruby 和 Ruby on Rails 的设计工作方式。

© www.soinside.com 2019 - 2024. All rights reserved.