gpt4 book ai didi

r - Julia:显示函数体(查找丢失的代码)

转载 作者:行者123 更新时间:2023-12-04 04:05:12 39 4
gpt4 key购买 nike

在 R 语言中,我能够声明一个函数并查看函数的主体,如下所示:

> megafoobar = function(x){ return(x + 10000 )}
> body(megafoobar)
{
return(x + 10000)
}

Julia 也有这种可能吗?我写了一个非常有用的函数,它仍然在内存/可调用中,但我忘记了我是怎么写的。我希望 Julia 中存在这样的方法,以便我可以了解我是如何编写它的。

最佳答案

对于包中定义的函数,可以使用 less@less .
前者,接受一个函数名(并返回第一个定义,
这不一定是你想要的),后者是一个函数调用。

less(less)         # First definition of less, 
# with signature (String,Integer)
@less less(less) # Definition of less(f::Callable)

但这不适用于您在 REPL 中自己定义的函数。
对于那些,您可以使用 code_typed ,但它只返回 AST(抽象
代码的语法树),可读性较差。
您还需要提供参数的类型,
因为可以有多个同名的函数:
您可以通过 methods 获得它们.
f(x::Number) = x + 1
f(x::AbstractArray) = length(x)

methods(f)
# 2 methods for generic function "f":
# f(x::Number) at none:1
# f(x::AbstractArray{T,N}) at none:1

code_typed(f,(Number,)) # Give the argument types as a tuple
# 1-element Array{Any,1}:
# :($(Expr(:lambda, {:x}, {{},{{:x,Number,0}},{}}, :(begin # none, line 1:
# return x::Number + 1
# end))))

关于r - Julia:显示函数体(查找丢失的代码),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26223649/

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