标签: ruby

Ruby在嵌套函数中访问外部变量

我相信这有一个简单的答案; 我似乎无法找到它.我在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 scope nested

41
推荐指数
1
解决办法
8022
查看次数

如何从正在运行的脚本中删除IRB提示符?

我可以从正在运行的Ruby脚本中转到IRB提示符吗?

我想运行一个脚本,但是然后让它在程序中的一个点上给出一个IRB提示符,其中包含程序的当前状态,但不仅仅是运行rdebug并有一个断点.

ruby irb

41
推荐指数
4
解决办法
1万
查看次数

如何检查Capistrano中是否存在文件(在远程服务器上)?

像我在Googleverse中看到的许多其他人一样,我成了File.exists?陷阱的受害者,陷阱当然会检查您的本地文件系统,而不是您正在部署的服务器.

我找到了一个使用shell hack的结果:

if [[ -d #{shared_path}/images ]]; then ...
Run Code Online (Sandbox Code Playgroud)

但这并不适合我,除非它在Ruby方法中很好地包装.

谁有人优雅地解决了这个问题?

ruby capistrano file exists

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

如何确保在红宝石中起作用

结帐此代码和输出

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

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

命令"ruby"在我的Mac上什么都不做

我不能让Ruby解释器在我的任何一台Mac上运行(一台MacBook和一台MacBook Pro,都运行Snow Leopard).当我运行它时,通过键入ruby终端,没有任何反应.它只是坐在那里.我可以通过按下来杀死它Ctrl+C,但就是这样.我知道Ruby进程正在运行,因为我可以在Activity Monitor中看到它,并且运行ruby --version正常.

我试过以下,都无济于事:

  1. 我有一些bash自定义,所以我尝试禁用它们,但这没有帮助.
  2. 我使用MacPorts安装了一个新的Ruby 1.8.7副本,但是那个有同样的问题.
  3. 我尝试退出并重新启动终端应用程序.

其他一些可能有用的信息:

  • 我正在尝试运行Snow Leopard附带的Ruby版本.
  • 我已经安装了Apple的开发人员工具.
  • 其他解释器(Python,Io等)工作正常.

我今晚花了一些时间在网上搜索这个问题,但没有找到任何讨论.我对可能导致它的原因感到茫然,所以任何人都可以提供的帮助将不胜感激.

ruby macos terminal

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

在Ruby中,"=>"是什么意思,它是如何工作的?

在学习Ruby时我偶尔会遇到"=>"运算符.通常我会以它的形式看到它

:symbol => value
Run Code Online (Sandbox Code Playgroud)

并且在将值传递给函数时似乎经常使用它.该运营商究竟叫什么?它是什么意思/是什么意思?它是内置到Ruby中还是像Rails和DataMapper这样的不同框架添加到符号类中的东西?它只与符号类一起使用吗?谢谢.

ruby symbols ruby-on-rails operators hashrocket

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

Ruby中Postgres查询的简单示例

对于我的生活,我找不到像运行一样的简单例子

"SELECT * FROM MyTable"

在Ruby中.我发现的一切都假设是ORM或Rails.现在,我不想要ORM; 我不想要Rails.我正在寻找使用pg gem并执行简单查询的独立内容.

ruby postgresql

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

当我使用Bundler时,为什么要关心RVM的Gemset功能?

我只是不明白.我想,Bundler的开发是为了解决宝石之间的版本冲突.因此我require "bundler/setup"知道Bundler将加载我所有宝石及其依赖项的正确版本.现在,RVM非常适合管理多个Rubies,我知道,但为什么我应该关心Gemset功能呢?我在这里想念一下吗?它能使我的开发更容易吗?也许,你们中的一些人可以给我一些关于开发和生产的完美RVM + Bundler工作流程的一些提示.

我也不知道RVM何时开始切换到另一个Ruby.我知道.rvmrc我的项目中可以有一个文件,但是我必须cd到这个目录才能进行切换吗?

此外,我通常使用Passenger进行开发,因为Passenger.prefpaneMac OS中集成非常棒.我还能用RVM做到这一点还是有更好的方法呢?Passenger是否识别.rvmrc文件并切换到正确的Gemset?

ruby workflow passenger bundler rvm

41
推荐指数
2
解决办法
4992
查看次数

为什么Ruby使用respond_to?而不是responds_to?

我很好奇为什么Ruby的内省相关方法来检查对象是否响应方法respond_to?而不是responds_to?

这对我来说似乎总是很尴尬,但也许那是因为我习惯于respondsToSelector客观c.

ruby introspection naming-conventions

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

如何使用yardoc列出未记录的模块/类/常量/方法?

我有一个小代码库,我正在用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)

我希望它只是列出未记录的项目,而不是浏览我的所有代码来查找未记录的常量和方法.有人知道怎么做吗?

ruby documentation documentation-generation yard

41
推荐指数
2
解决办法
3553
查看次数