我相信这有一个简单的答案; 我似乎无法找到它.我在Ruby中创建了一个嵌套函数,但我无法从内部函数内部的外部函数访问变量:
def foo(x)
def bar
puts x
end
bar
42
end
foo(5)
Run Code Online (Sandbox Code Playgroud)
我得到:NameError: undefined local variable or methodx'为main:Object`
类似的Python代码有效:
def foo(x):
def bar():
print x
bar()
return 42
foo(5)
Run Code Online (Sandbox Code Playgroud)
那么我如何在Ruby中做同样的事情呢?
我可以从正在运行的Ruby脚本中转到IRB提示符吗?
我想运行一个脚本,但是然后让它在程序中的一个点上给出一个IRB提示符,其中包含程序的当前状态,但不仅仅是运行rdebug并有一个断点.
像我在Googleverse中看到的许多其他人一样,我成了File.exists?陷阱的受害者,陷阱当然会检查您的本地文件系统,而不是您正在部署的服务器.
我找到了一个使用shell hack的结果:
if [[ -d #{shared_path}/images ]]; then ...
Run Code Online (Sandbox Code Playgroud)
但这并不适合我,除非它在Ruby方法中很好地包装.
谁有人优雅地解决了这个问题?
结帐此代码和输出
def lab
yield
ensure
puts 'in ensure block'
true
end
puts lab { puts 'inside inline block'; false }
output is
#inside inline block
#in ensure block
#false
Run Code Online (Sandbox Code Playgroud)
我希望在执行块后确保执行,因为确保返回true,调用方法的最终输出将为'true'.
我不能让Ruby解释器在我的任何一台Mac上运行(一台MacBook和一台MacBook Pro,都运行Snow Leopard).当我运行它时,通过键入ruby终端,没有任何反应.它只是坐在那里.我可以通过按下来杀死它Ctrl+C,但就是这样.我知道Ruby进程正在运行,因为我可以在Activity Monitor中看到它,并且运行ruby --version正常.
我试过以下,都无济于事:
其他一些可能有用的信息:
我今晚花了一些时间在网上搜索这个问题,但没有找到任何讨论.我对可能导致它的原因感到茫然,所以任何人都可以提供的帮助将不胜感激.
在学习Ruby时我偶尔会遇到"=>"运算符.通常我会以它的形式看到它
:symbol => value
Run Code Online (Sandbox Code Playgroud)
并且在将值传递给函数时似乎经常使用它.该运营商究竟叫什么?它是什么意思/是什么意思?它是内置到Ruby中还是像Rails和DataMapper这样的不同框架添加到符号类中的东西?它只与符号类一起使用吗?谢谢.
对于我的生活,我找不到像运行一样的简单例子
"SELECT * FROM MyTable"
在Ruby中.我发现的一切都假设是ORM或Rails.现在,我不想要ORM; 我不想要Rails.我正在寻找使用pg gem并执行简单查询的独立内容.
我只是不明白.我想,Bundler的开发是为了解决宝石之间的版本冲突.因此我require "bundler/setup"知道Bundler将加载我所有宝石及其依赖项的正确版本.现在,RVM非常适合管理多个Rubies,我知道,但为什么我应该关心Gemset功能呢?我在这里想念一下吗?它能使我的开发更容易吗?也许,你们中的一些人可以给我一些关于开发和生产的完美RVM + Bundler工作流程的一些提示.
我也不知道RVM何时开始切换到另一个Ruby.我知道.rvmrc我的项目中可以有一个文件,但是我必须cd到这个目录才能进行切换吗?
此外,我通常使用Passenger进行开发,因为Passenger.prefpane在Mac OS中集成非常棒.我还能用RVM做到这一点还是有更好的方法呢?Passenger是否识别.rvmrc文件并切换到正确的Gemset?
我很好奇为什么Ruby的内省相关方法来检查对象是否响应方法respond_to?而不是responds_to?
这对我来说似乎总是很尴尬,但也许那是因为我习惯于respondsToSelector客观c.
我有一个小代码库,我正在用YARD记录.当我运行yardoc命令时,它告诉我:
Files: 40
Modules: 14 ( 0 undocumented)
Classes: 39 ( 0 undocumented)
Constants: 21 ( 4 undocumented)
Methods: 239 ( 31 undocumented)
88.82% documented
Run Code Online (Sandbox Code Playgroud)
我希望它只是列出未记录的项目,而不是浏览我的所有代码来查找未记录的常量和方法.有人知道怎么做吗?