小编And*_*imm的帖子

在使用多个单词命名宝石时,是否应该使用破折号或下划线?

当宝石名称有多个单词时,我对宝石命名约定是什么感到困惑.

  • thinking-sphinx是gem的名称,但是这个gem的基础*.rb文件是lib/thinking_sphinx.rb(下划线)

  • acts-as-taggable-on是gem的名称,base*.rb文件名为lib/acts-as-taggable-on.rb(连字符)

  • factory_girl在gem名称和base*.rb文件的名称中使用下划线

如果使用下划线或连字符,这有关系吗?这里是否有任何新的共识?

ruby naming-conventions

56
推荐指数
2
解决办法
9920
查看次数

如何在Ruby中向异常消息添加信息?

如何在不更改ruby中的类的情况下向异常消息添加信息?

我目前使用的方法是

strings.each_with_index do |string, i|
  begin
    do_risky_operation(string)
  rescue
    raise $!.class, "Problem with string number #{i}: #{$!}"
  end
end
Run Code Online (Sandbox Code Playgroud)

理想情况下,我还想保留回溯.

有没有更好的办法?

ruby exception-handling exception

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

了解Ruby的加载路径

我有点困惑为什么我的项目无法加载它需要的文件,这是一个非常简单的项目树:

processor/
  bin/
  lib/
    processor.rb
    processor/
      mapper.rb
      reducer.rb
Run Code Online (Sandbox Code Playgroud)

我的processor.rb文件看起来像

require 'processor/mapper'
require 'processor/reducer'

class Processor

end
Run Code Online (Sandbox Code Playgroud)

只是为了测试文件映射器看起来像:

class Mapper
  def run
    puts "running map"
  end
end
Run Code Online (Sandbox Code Playgroud)

但运行ruby lib/processor.rb结果:

<internal:lib/rubygems/custom_require>:29:in `require': no such file to load -- processor/mapper (LoadError)
    from <internal:lib/rubygems/custom_require>:29:in `require'
    from lib/processor.rb:3:in `<class:Processor>'
    from lib/processor.rb:2:in `<main>'    
Run Code Online (Sandbox Code Playgroud)

ruby

55
推荐指数
3
解决办法
6万
查看次数

如何在Ruby中使类构造函数成为私有的?

class A
private
  def initialize
    puts "wtf?"
  end
end

A.new #still works and calls initialize
Run Code Online (Sandbox Code Playgroud)

class A
private
  def self.new
    super.new
  end
end
Run Code Online (Sandbox Code Playgroud)

不起作用

那么正确的方法是什么?我想new私有化并通过工厂方法调用它.

ruby constructor access-specifier

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

rspec是否有比target更具体的东西.应该<6?

http://cheat.errtheblog.com/s/rspec/有不等式(例如小于或大于)

target.should be < 6
Run Code Online (Sandbox Code Playgroud)

自创建备忘单以来,有没有更好的创建?

ruby rspec

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

为什么显性回报会对Proc产生影响?

def foo
  f = Proc.new { return "return from foo from inside proc" }
  f.call # control leaves foo here
  return "return from foo" 
end

def bar
  b = Proc.new { "return from bar from inside proc" }
  b.call # control leaves bar here
  return "return from bar" 
end

puts foo # prints "return from foo from inside proc" 
puts bar # prints "return from bar" 
Run Code Online (Sandbox Code Playgroud)

我认为这个return关键字在Ruby中是可选的,return无论你是否请求它,你总是在想.鉴于这种情况,我觉得很奇怪,foobar有不同的输出由事实来确定foo包含一个明确的returnProc …

ruby return proc-object

51
推荐指数
3
解决办法
1万
查看次数

删除/取消定义类方法

您可以为类动态定义类方法,如下所示:

class Foo
end

bar = %q{def bar() "bar!" end}
Foo.instance_eval(bar)
Run Code Online (Sandbox Code Playgroud)

但是你如何做相反的事情:删除/取消定义一个类方法?我怀疑Module remove_methodundef_method方法可能可以用于此目的,但我在谷歌搜索几个小时之后看到的所有示例都是用于删除/取消定义实例方法,而不是类方法.或者也许你可以传递一种语法instance_eval来做到这一点.

提前致谢.

ruby metaprogramming

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

如何使用ruby"case ... when"与不等式?

你能用ruby做到这一点吗?它似乎"错过"了不平等的案件

 case myvar
 when  myvar < -5
    do somethingA
 when -5..-3
    do special_something_XX
 when -2..-1
    do special_something_YY
 when myvar == 0
    do somethingB
 when myvar > 0
    go somethingC
 end
Run Code Online (Sandbox Code Playgroud)

ruby switch-statement

51
推荐指数
3
解决办法
3万
查看次数

如何打破Ruby中的嵌套循环?

假设以下ruby代码:

bank.branches do |branch|
  branch.employees.each do |employee|
    NEXT BRANCH if employee.name = "John Doe"
  end
end
Run Code Online (Sandbox Code Playgroud)

NEXT BRANCH当然是伪代码.有没有一种方法可以打破一个父循环,例如在Perl中这样做的方式(通过使用循环标签)?

提前致谢.

ruby loops nested-loops

50
推荐指数
4
解决办法
3万
查看次数

是否需要File.expand_path(...,__ FILE__)最佳做法?

require File.expand_path(..., __FILE__)项目中需要其他文件的最佳方法吗?

ruby require

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