当宝石名称有多个单词时,我对宝石命名约定是什么感到困惑.
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中的类的情况下向异常消息添加信息?
我目前使用的方法是
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)
理想情况下,我还想保留回溯.
有没有更好的办法?
我有点困惑为什么我的项目无法加载它需要的文件,这是一个非常简单的项目树:
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) 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私有化并通过工厂方法调用它.
http://cheat.errtheblog.com/s/rspec/有不等式(例如小于或大于)
target.should be < 6
Run Code Online (Sandbox Code Playgroud)
自创建备忘单以来,有没有更好的创建?
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无论你是否请求它,你总是在想.鉴于这种情况,我觉得很奇怪,foo并bar有不同的输出由事实来确定foo包含一个明确的return在Proc …
您可以为类动态定义类方法,如下所示:
class Foo
end
bar = %q{def bar() "bar!" end}
Foo.instance_eval(bar)
Run Code Online (Sandbox Code Playgroud)
但是你如何做相反的事情:删除/取消定义一个类方法?我怀疑Module remove_method和undef_method方法可能可以用于此目的,但我在谷歌搜索几个小时之后看到的所有示例都是用于删除/取消定义实例方法,而不是类方法.或者也许你可以传递一种语法instance_eval来做到这一点.
提前致谢.
你能用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代码:
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中这样做的方式(通过使用循环标签)?
提前致谢.
是require File.expand_path(..., __FILE__)项目中需要其他文件的最佳方法吗?
ruby ×10
constructor ×1
exception ×1
loops ×1
nested-loops ×1
proc-object ×1
require ×1
return ×1
rspec ×1