gpt4 book ai didi

ruby 调试 : How to find out which method or variable is responding?

转载 作者:数据小太阳 更新时间:2023-10-29 08:18:14 26 4
gpt4 key购买 nike

在调试一些复杂的 ruby​​ 代码时,很容易被堆叠的方法定义弄糊涂,以及与局部变量的命名冲突。

我正在寻找一种快速的方法来找出响应表达式的方法或变量,例如 any_expression.identify

到目前为止我能找到的最好的是:

method(:happy)
#=> #<Method: Object(Helper)#happy>

method(:happy).source_location
#=> ["/home/somebody/project/lib/helper.rb", 9]

不幸的是,局部变量(如 happy=42)将在前面,但 method(:happy) 仍将返回另一个方法。

有什么想法吗?

最佳答案

您不必使用 self.class.new 作为前缀。如果该类没有不带参数的构造函数,它将无法工作。

local_variables.include?(:foo) # local variable
method(:foo) # method


另一种选择是使用 defined? 关键字:

foo = 42
def bar; end

defined?(foo) # => "local-variable"
defined?(bar) # => "method"

在pry中,可以使用show-method:

show-method bar # =>
# From: (pry) @ line 104:
# Owner: Object
# Visibility: public
# Number of lines: 1

# def bar; end

ls:

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 ~


我不认为有一种方法可以准确地检查局部变量的定义位置。但是,您始终可以在控制台中反向搜索以查看定义它的行:

Ctrl + r: foo = => (reverse-i-search)`foo =': foo = 42

关于 ruby 调试 : How to find out which method or variable is responding?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34719304/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com