小编Mas*_*son的帖子

如何解决 julia 表达式中变量的范围?

有没有办法在不运行任意表达式的情况下运行名称解析?例如,我想采用诸如

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 社区

julia

11
推荐指数
1
解决办法
82
查看次数

如何从 splatted kwargs 字段中检索关键字参数?

如果我有一个像 的函数签名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

julia

9
推荐指数
1
解决办法
229
查看次数

如何为自定义数组类型重载 Base.show?

假设我使用自己的自定义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

8
推荐指数
1
解决办法
826
查看次数

如何编写一个函数,该函数将检查每个调用方法的返回类型是否可静态推断?

我想编写一个函数,如果julia无法为该函数推断出具体的返回类型,它将抛出一个错误。如何在没有任何运行时开销的情况下执行此操作?

julia

6
推荐指数
1
解决办法
189
查看次数

在终端中打开 emacsclient 工作但不适用于 Automator

因此,当我尝试使用 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” …

emacs terminal automator emacsclient spacemacs

5
推荐指数
1
解决办法
643
查看次数

如何打乱一系列数字,然后将其拆分为一定长度的子数组?

假设我有一个 range 1:N,我想将范围打乱为随机顺序,然后将生成的打乱数组拆分为最多128元素长的子数组。我怎样才能做到这一点?

这个问题是基于 JuliaLang Slack 频道上出现的一个问题。

julia

5
推荐指数
1
解决办法
937
查看次数

切片元组时避免类型不稳定

这个问题是什么出现了改编版本在这里的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这样的作品?

julia

4
推荐指数
1
解决办法
66
查看次数

未在函数主体中指定泛型类型参数时,该如何访问?

假设我有

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

3
推荐指数
1
解决办法
46
查看次数

在Julia中打印变量下标

嘿所以我知道由于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)

如果不自己写下所有可能的下标,我该如何解决这个问题呢?

julia

1
推荐指数
1
解决办法
524
查看次数

标签 统计

julia ×8

automator ×1

emacs ×1

emacsclient ×1

spacemacs ×1

terminal ×1