【问题标题】:return value in method rubyruby 方法中的返回值
【发布时间】:2012-03-01 19:12:20
【问题描述】:

我有这个方法:

def validates_image_dependents
  post = self.find(params[:id])
   i=0
   for this_post in Post.all
    if this_post.posted_filename == post.post_filename
     i+=1
    end
   end
 return i > 1
end

如果 i > 1,我希望该方法返回 true 或 false 依赖,但我得到 nil。

我做错了什么?

没有方法可以正常工作。

谢谢

【问题讨论】:

    标签: ruby-on-rails ruby methods


    【解决方案1】:

    看起来您看到 nil 导致 irb 输出如下:

    irb(main):018:0> def validates_image_dependents                                                                 
    irb(main):019:1>   post = self.find(params[:id])                                                                
    irb(main):020:1>    i=0                                                                                         
    irb(main):021:1>    for this_post in Post.all                                                                   
    irb(main):022:2>     if this_post.posted_filename == post.post_filename                                         
    irb(main):023:3>      i+=1                                                                                      
    irb(main):024:3>     end                                                                                        
    irb(main):025:2>    end                                                                                         
    irb(main):026:1>  return i > 1                                                                                  
    irb(main):027:1> end                                                                                            
    => nil 
    

    发生这种情况是因为您定义了方法 validates_image_dependents 并且定义了方法表达式 返回了nil

    您需要执行您的方法以获得实际结果:

    irb(main):028:0> validates_image_dependents 
    => true
    

    【讨论】:

    • 完美,这是个问题:D 对不起,我的无能。
    【解决方案2】:

    这对我来说很好。它返回真或假。

    def some_method
       i=4 #or i = 0
       return i > 1
    end
    

    方法中可能发生了一些奇怪的事情?我会放一个调试器并检查。

    【讨论】:

    • 通过这种方法,我在控制台导轨中得到 nil 。我使用红宝石 1.9.2-p290。我使用 Rails 3.1.3
    • 我的是 ruby​​ ree-1.8.7-2011.03。我会在 ruby​​ 1.9.2 中试用它并告诉你。
    【解决方案3】:

    为了简化你的方法,你可以使用这样的东西:

      Post.all.count(|t| t.posted_filename == post.filename) > 1
    

    我看不到此代码返回 nil 的任何方式。

    return i > 1 无论我拥有哪种类型或值,都不能返回 nil。 如果 i 是 nil 或任何其他类型而不是 Numeric 它应该引发错误,否则它应该返回一个布尔值。更好地了解您正在运行的代码。

    【讨论】:

    • 问题是我已经运行了该方法,然后返回true或false:D。
    猜你喜欢
    • 1970-01-01
    • 2015-07-11
    • 2017-04-25
    • 2023-03-13
    • 1970-01-01
    • 2023-03-09
    • 2014-10-18
    • 1970-01-01
    • 2012-02-21
    相关资源
    最近更新 更多