相关疑难解决方法(0)

什么是Ruby Gotchas新手应该被警告?

我最近学习了Ruby编程语言,总而言之,它是一门很好的语言.但我很惊讶地发现它并不像我预期的那么简单.更准确地说,"最不惊讶的规则"对我来说似乎并不受到尊重(当然这是非常主观的).例如:

x = true and false
puts x  # displays true!
Run Code Online (Sandbox Code Playgroud)

和着名的:

puts "zero is true!" if 0  # zero is true!
Run Code Online (Sandbox Code Playgroud)

你会警告一个Ruby新手的其他"问题"是什么?

ruby

106
推荐指数
16
解决办法
1万
查看次数

Ruby中的隐式返回值

我对Ruby有点新鲜,虽然我发现它是一种非常直观的语言,但我很难理解隐式返回值的行为方式.

我正在开发一个小程序来grep Tomcat日志并从相关数据生成管道分隔的CSV文件.这是我用来从日志条目生成行的简化示例.

class LineMatcher
  class << self
    def match(line, regex)
      output = ""
      line.scan(regex).each do |matched|
        output << matched.join("|") << "\n"
      end
      return output
    end        
  end
end


puts LineMatcher.match("00:00:13,207 06/18 INFO  stateLogger - TerminationRequest[accountId=AccountId@66679198[accountNumber=0951714636005,srNumber=20]",
                       /^(\d{2}:\d{2}:\d{2},\d{3}).*?(\d{2}\/\d{2}).*?\[accountNumber=(\d*?),srNumber=(\d*?)\]/)
Run Code Online (Sandbox Code Playgroud)

当我运行这段代码时,我得到了以下内容,这是显式返回输出值时的预期结果.

00:00:13,207|06/18|0951714636005|20
Run Code Online (Sandbox Code Playgroud)

但是,如果我将LineMatcher更改为以下内容并且不显式返回输出:

    class LineMatcher
      class << self
        def match(line, regex)
          output = ""
          line.scan(regex).each do |matched|
            output << matched.join("|") << "\n"
          end
        end        
      end
    end
Run Code Online (Sandbox Code Playgroud)

然后我得到以下结果:

00:00:13,207
06/18
0951714636005
20
Run Code Online (Sandbox Code Playgroud)

显然,这不是理想的结果.感觉我应该能够摆脱输出变量,但不清楚返回值的来源.此外,欢迎任何其他可读性的建议/改进.

ruby readability return implicit

18
推荐指数
2
解决办法
2万
查看次数

标签 统计

ruby ×2

implicit ×1

readability ×1

return ×1