response_to可能不是那么明显吗?在红宝石中工作.考虑一下:
class A
def public_method
end
protected
def protected_method
end
private
def private_method
end
end
obj = A.new
obj.respond_to?(:public_method)
# true - that's pretty obvious
obj.respond_to?(:private_method)
# false - as expected
obj.respond_to?(:protected_method)
# true - WTF?
Run Code Online (Sandbox Code Playgroud)
因此,如果'obj'响应protected_method,我们应该期待
obj.protected_method
Run Code Online (Sandbox Code Playgroud)
我不应该提出异常吗?
......但它明显提升了
调用respond_to的文档点?第二个参数设置为true也检查私有方法
obj.respond_to?(:private_method, true)
# true
Run Code Online (Sandbox Code Playgroud)
这更合理
所以问题是如何检查对象是否只响应公共方法?有没有比这更好的解决方案?
obj.methods.include?(:public_method)
# true
obj.methods.include?(:protected_method)
# false
Run Code Online (Sandbox Code Playgroud) 在我看来,自从这个着名的线程以来,Ruby社区一直在关注自动加载,因为出于线程安全原因而不鼓励使用它.
有谁知道这不再是Ruby 1.9.1或1.9.2中的问题吗?我已经看过一些关于包装需求的讨论等等,但1.9更改日志(或者至少和我能找到的一样多)似乎并没有解决这个特定的问题.我想知道我是否可以在没有任何合理悲伤的情况下合理地开始自动加载仅1.9的库.
提前感谢任何见解.
我想要做的是在Windows上使用git克隆,但是父存储库存在于unix机器中.
我使用ssh克隆从UNIX到Windows的克隆,我得到了这个奇怪的错误.
error: git checkout-index: unable to create file <filename>
Run Code Online (Sandbox Code Playgroud)
这发生在git clone的结帐步骤中.
谁能帮我?
在Ternary运算符中,一个想要加入["foo", "bar", "baz"]逗号和"and"的人引用了Ruby Cookbook的话
如果效率对您很重要,则在将项目附加到现有字符串时不要构建新字符串.[等等] ...使用str << var1 <<''<< var2代替.
但这本书写于2006年.
<<在Ruby的所有主要实现中,使用appending(ie )仍然是在给定一个较小字符串数组的情况下构建大字符串的最快方法吗?
我有点不知所措.Rails 3中的Scopes的单元测试是否有意义?
一方面,我正在编写代码,我应该测试该代码.
但是,另一方面,基本上我的所有范围都是微不足道的.检查传递参数的一个变量几乎是我迄今为止最复杂的范围.
scope :author, proc { |author| where(:author_user_id => author }
该代码是微不足道的,并且或多或少地覆盖了实际使用范围的函数.
测试或不测试范围的最佳实践是什么?
我曾经使用过Heckle,但由于ParseTree的问题,它与ruby 1.9不兼容.我寻找替代方案,但唯一看起来很有希望的是Chaser,而且我没有任何明确的文档可以用来看看我是否可以使用RSpec.它似乎有Test :: Unit依赖.
那么 - 是否有人使用任何很酷的工具来真正检查测试的质量?
或者 - 有没有提供比c0覆盖更好的覆盖工具?这有助于解决同样的问题.我现在正在使用cover_me,但它是c0,就像rcov一样.
我在使用1.8.7后安装了Ruby 1.9.2,因为我需要一个功能.我曾经调用过很多这样的方法:
do_something (arg0, arg1)
Run Code Online (Sandbox Code Playgroud)
使用1.9.2,我得到以下错误, syntax error, unexpected ',', expecting ')'修复似乎是:
do_something arg0, arg1
Run Code Online (Sandbox Code Playgroud)
但这可能需要几个小时才能解决所有问题.有没有解决的办法?为什么一开始就是错误?谢谢
我对Ruby中的和/ &&/=关键字有疑问.
ruby文档说,所提到的关键字的优先级是:(1)&&,(2)=,(3)和.
我写了这段代码:
def f(n)
n
end
if a = f(2) and b = f(4) then
puts "1) #{a} #{b}"
end
if a = f(2) && b = f(4) then
puts "2) #{a} #{b}"
end
Run Code Online (Sandbox Code Playgroud)
输出是:
1)2 4 [预期]
2)4 4 [ 为什么?]
出于某种原因,使用&&会导致a和b评估为4?
这个问题提到了这个Enumerator::Yielder#yield方法.我之前没有使用它,我想知道在什么情况下它会有用.
当您想要创建无限的项目列表(例如Eratosthenes的Sieve)以及何时需要使用外部迭代器时,它是否主要有用?
ruby ×8
ruby-1.9 ×3
and-operator ×1
autoload ×1
enumerable ×1
git ×1
git-checkout ×1
git-clone ×1
named-scope ×1
optimization ×1
rspec2 ×1
self ×1
string ×1
syntax-error ×1
unit-testing ×1
yield ×1