有没有办法在不运行任意表达式的情况下运行名称解析?例如,我想采用诸如
quote
x = 1
y = 2*x + 1
z = x^2 - 1
f(x) = 2*x + 1
end
Run Code Online (Sandbox Code Playgroud)
并被告知在此块的范围内定义的名称是x, y, z, f,并且名称*, +, ^, -是从此块的范围之外拉入的。如果它可以告诉我在其主体中定义了一个子作用域,f它会创建自己的名称x并+从封闭的作用域中拉入,则加分。
这个问题出现在Julia Zulip 社区
如果我有一个像 的函数签名f(args...; kwargs...),我怎样才能从中得到一个特定的关键字kwargs?天真地打字 kwargs.x不起作用:
julia> f(args...; kwargs...) = kwargs.x
f (generic function with 1 method)
julia> f(x=1)
ERROR: type Pairs has no field x
Stacktrace:
[1] getproperty(::Base.Iterators.Pairs{Symbol,Int64,Tuple{Symbol},NamedTuple{(:x,),Tuple{Int64}}}, ::Symbol) at ./Base.jl:20
[2] #f#7(::Base.Iterators.Pairs{Symbol,Int64,Tuple{Symbol},NamedTuple{(:x,),Tuple{Int64}}}, ::typeof(f)) at ./REPL[2]:1
[3] (::var"#kw##f")(::NamedTuple{(:x,),Tuple{Int64}}, ::typeof(f)) at ./none:0
[4] top-level scope at REPL[3]:1
Run Code Online (Sandbox Code Playgroud)
这个问题出现在 #helpdesk 的 JuliaLang Slack 频道上。要自动邀请非常有用的 julia slack,只需填写https://slackinvite.julialang.org
假设我使用自己的自定义show方法制作自己的自定义向量类型:
struct MyVector{T} <: AbstractVector{T}
v::Vector{T}
end
function Base.show(io::IO, v::MyVector{T}) where {T}
println(io, "My custom vector with eltype $T with elements")
for i in eachindex(v)
println(io, " ", v.v[i])
end
end
Run Code Online (Sandbox Code Playgroud)
如果我尝试在 REPL 中创建这些对象之一,我会收到与我从未打算调用的函数相关的意外错误:
julia> MyVector([1, 2, 3])
Error showing value of type MyVector{Int64}:
ERROR: MethodError: no method matching size(::MyVector{Int64})
Closest candidates are:
size(::AbstractArray{T,N}, ::Any) where {T, N} at abstractarray.jl:38
size(::BitArray{1}) at bitarray.jl:77
size(::BitArray{1}, ::Integer) at bitarray.jl:81
...
Stacktrace:
[1] axes at ./abstractarray.jl:75 [inlined]
[2] summary(::IOContext{REPL.Terminals.TTYTerminal}, ::MyVector{Int64}) at …Run Code Online (Sandbox Code Playgroud) 我想编写一个函数,如果julia无法为该函数推断出具体的返回类型,它将抛出一个错误。如何在没有任何运行时开销的情况下执行此操作?
因此,当我尝试使用 Automator 服务打开新的 emacs(带有 spacemacs 的 GNU 版本 25.2)缓冲区时,出现了一些非常奇怪的行为。
在我的终端中,该命令emacsclient -a '' -c按预期工作,通过 emacsclient 打开一个新缓冲区。但是,当我在 Automator 中创建一个仅运行 ( /bin/bash) shell 脚本的服务时:
emacsclient -a '' -c
我收到一条错误消息:
The action “Run Shell Script” encountered an error: “emacsclient: could not get terminal name”
由于怀疑这是由于 Automator 没有使用某些默认PATH变量,我尝试了以下操作:
PATH=/usr/local/bin:$PATH
emacsclient -c
它产生了与以前相同的错误。
接下来我尝试
PATH=/usr/bin:/usr/local/bin export PATH;
emacsclient -c
产生了不同的错误消息:
The action “Run Shell Script” encountered an error: “emacsclient: invalid option -- c
Try `emacsclient --help' for more information” …
假设我有一个 range 1:N,我想将范围打乱为随机顺序,然后将生成的打乱数组拆分为最多128元素长的子数组。我怎样才能做到这一点?
这个问题是基于 JuliaLang Slack 频道上出现的一个问题。
这个问题是什么出现了改编版本在这里的JuliaLang Zulip服务支持。
假设我有一个函数,它接受异构类型Tuple并返回该元组的一个切片,其中切片索引可以仅从类型信息中静态推断出来。如何以正确推断输出类型的方式编写我的函数?
例如,假设我的功能是
function f(t::Tuple, A::Array{T, N}) where {T, N}
if T <: AbstractFloat
imin = 1
elseif T <: Integer
imin = 2
else
imin = 3
end
imax = N+2
t[imin:imax]
end
Run Code Online (Sandbox Code Playgroud)
我们看到类型推断只计算出这会产生 a Tuple,而不是它的长度或元素类型,即使所有需要的信息在编译时都可用?
julia> let t = (:a, "b", 2, 3.0, Val(1), 2+im), A = rand(Int, 3,3)
Base.return_types(f, Tuple{typeof(t), typeof(A)})
end
1-element Array{Any,1}:
Tuple
Run Code Online (Sandbox Code Playgroud)
我怎样才能写出f这样的作品?
假设我有
struct X{T} end
Run Code Online (Sandbox Code Playgroud)
以及在上调度的函数,如果未在方法签名中指定函数主体X,如何T在函数主体内部进行访问?即
function foo(x::X)
# can i get T in here?
end
Run Code Online (Sandbox Code Playgroud)
这是对julialang松弛问题的重述:https ://julialang.slack.com/archives/C6A044SQH/p1568651904113000
要获得访问权限,只需填写以下表格:https : //slackinvite.julialang.org
嘿所以我知道由于Julia one中的Unicode支持,可以通过键入来编写例如字母a和下标1 a\_1<TAB>.现在,如果我想做以下事情怎么办?
for i in [1 2 3]
println("a\_i")
end
Run Code Online (Sandbox Code Playgroud)
并将输出写为
a?
a?
a?
Run Code Online (Sandbox Code Playgroud)
如果不自己写下所有可能的下标,我该如何解决这个问题呢?