在调试具有一定复杂性的ruby代码时,很容易被堆叠的方法定义和命名与局部变量的冲突混淆。
我正在寻找一种快速的方法来找出哪个方法或变量响应表达式,类似于$('.navbar-toggle').addClass('hidden-xs');
。
到目前为止我能找到的最好的是:
any_expression.identify
不幸的是,一个局部变量(如method(:happy)
#=> #<Method: Object(Helper)#happy>
method(:happy).source_location
#=> ["/home/somebody/project/lib/helper.rb", 9]
)将位于其前面,但happy=42
仍将返回另一个方法。
有什么想法吗?
答案 0 :(得分:6)
您不必使用$("#anchor-from").change(function(){
if($('#period-daily').is(':checked')){
console.log(finalStartDDIDate1);
}
else if($('#period-weekly').is(':checked')) {
console.log(finalEndDDIDate1);
}
});
作为前缀。如果类没有没有参数的构造函数,它将无法工作。
self.class.new
<小时/> 另一种方法是使用
local_variables.include?(:foo) # local variable
method(:foo) # method
关键字:
defined?
在pry中,您可以使用foo = 42
def bar; end
defined?(foo) # => "local-variable"
defined?(bar) # => "method"
:
show-method
show-method bar # =>
# From: (pry) @ line 104:
# Owner: Object
# Visibility: public
# Number of lines: 1
# def bar; end
:
ls
<小时/> 我认为没有办法确切地确定局部变量的定义。但是,您始终可以在控制台中反向搜索以查看定义它的行:
Ctrl + r :ls foo # =>
# Comparable#methods: between?
# Numeric#methods:
# +@ conj imaginary pretty_print_cycle rectangular
# abs2 conjugate nonzero? quo remainder
# angle eql? phase real singleton_method_added
# arg i polar real? step
# coerce imag pretty_print rect to_c
# Integer#methods:
# ceil downto gcdlcm next pred times to_r
# chr floor integer? numerator rationalize to_i truncate
# denominator gcd lcm ord round to_int upto
# Fixnum#methods:
# % ** -@ << == >= ^ div fdiv modulo succ zero?
# & + / <= === >> abs divmod inspect odd? to_f |
# * - < <=> > [] bit_length even? magnitude size to_s ~
=&gt; (反向搜索)`foo =':foo = 42
答案 1 :(得分:3)
使用owner
。它为模块定义了一个方法。
class A
def foo; end
end
class B < A
end
B.new.method(:foo).owner # => A