我有一个Rake任务,我在下面简化了.我在Windows上使用Ruby 1.9.
也许您想猜测下面调用Rake任务"list_all_levels"的结果?它应该是:
"Hello level 1"
"Hello level 2"
"Hello level 3"
Run Code Online (Sandbox Code Playgroud)
但由于我不知道的原因,它只打印"Hello level 1"然后停止.
也就是说,它始终只调用第一个任务.如果我更改第一行以传递arg"42",它将打印"Hello level 42"然后停止.
我想知道为什么它不会调用任务3次并打印所有3行?有没有办法让它按照我的期望工作?
task :list_all_levels => [] do
Rake::Task[:list].invoke 1
Rake::Task[:list].invoke 2
Rake::Task[:list].invoke 3
end
task :list, [:level] => [] do |t, args|
puts "Hello level #{args.level}"
end
Run Code Online (Sandbox Code Playgroud) 如何将Ruby脚本中的环境变量导出到父shell?例如,实现readBash内置的天真实现:
#!/usr/bin/ruby
varname = ARGV[0]
ENV[varname] = STDIN.gets # but have varname exported to the parent process
Run Code Online (Sandbox Code Playgroud) 我正在Ruby 1.9.2中编写一个定义了几个方法的模块.当调用这些方法中的任何一个时,我希望它们中的每一个首先执行某个语句.
module MyModule
def go_forth
a re-used statement
# code particular to this method follows ...
end
def and_multiply
a re-used statement
# then something completely different ...
end
end
Run Code Online (Sandbox Code Playgroud)
但我想避免a re-used statement在每个方法中明确地放置该代码.有办法吗?
(如果重要的话,a re-used statement每个方法在调用时都会打印自己的名字.它会通过一些变体来实现puts __method__.)
如何实现以下目标:我想更改.each循环中管道字符之间引用的数组元素的值.
这是我想要做的一个例子,但目前没有工作:
x = %w(hello there world)
x.each { |element|
if(element == "hello") {
element = "hi" # change "hello" to "hi"
}
}
puts x # output: [hi there world]
Run Code Online (Sandbox Code Playgroud)
很难找到如此普遍的东西.
RSpec before(:suite)和after(:suite)MiniTest 有替代品吗?
我怀疑自定义测试运行器是有序的,但我无法想象这不是一个常见的要求,所以有人可能实现了.:-)
我想定义一个Date#next第二天返回的实例方法.所以我做了一个DateExtension模块,像这样:
module DateExtension
def next(symb=:day)
dt = DateTime.now
{:day => Date.new(dt.year, dt.month, dt.day + 1),
:week => Date.new(dt.year, dt.month, dt.day + 7),
:month => Date.new(dt.year, dt.month + 1, dt.day),
:year => Date.new(dt.year + 1, dt.month, dt.day)}[symb]
end
end
Run Code Online (Sandbox Code Playgroud)
使用它:
class Date
include DateExtension
end
Run Code Online (Sandbox Code Playgroud)
调用该方法d.next(:week)会使Ruby抛出错误ArgumentError: wrong number of arguments (1 for 0).如何使用模块中声明的next方法覆盖Date类中的默认方法DateExtension?
我正在试图弄清楚如何使用带有rails 3的记录器.我需要在控制台中记录一个没有它的文件,但我只是无法弄清楚如何设置它然后,如何写一些东西到那个日志.我试过rails docs,但他们并没有真正说清楚.
所以我知道bang(感叹号)和非bang方法之间的区别通常是方法是修改对象本身还是返回一个单独的修改对象,保持原始不变.
然后在本书的第6章中构建User模型时,我遇到了这个User.create方法,它创建了一个新模型并将其保存到数据库中.在Michael Hartl的Ruby on Rails 3教程中,他写道,该User.create!方法"就像create方法一样工作......除非它在创建失败时引发ActiveRecord :: Record-Invalid异常".
我很困惑.是User.create!方法不是下面的Ruby"砰-公约"还是我完全失去了一些东西?如果他遵循惯例,User.create!如果它是一个类方法,如何修改self?
我安装的宝石sudo gem install ...无法执行(我得到了command not found).他们似乎安装在/usr/local/Cellar/Brew的安装目录中(同样,宝石/Library/Ruby/也不起作用).还有什么我需要做的才能使宝石可执行吗?我在Mac OS X 10.6上使用ZSH,在Brew中使用Ruby v1.8.
编辑:它似乎现在正在运作.我刚出去几个小时又回来再试一次.