【问题标题】:Julia: concatenate string and integerJulia:连接字符串和整数
【发布时间】:2015-01-07 19:35:26
【问题描述】:

在 Julia 中连接字符串和整数值的最简单方法是什么?我想做类似的事情:

julia> foo = "test: "
"test: "

julia> bar = 3
3

julia> foobar = foo * bar
ERROR: `*` has no method matching *(::ASCIIString, ::Int64)

【问题讨论】:

    标签: julia


    【解决方案1】:

    我对 Julia 不是很熟悉,但我相信你最好使用字符串插值:

    "test: $bar"
    

    或者:

    string("test: ", bar)
    

    或者,如果您确实想使用 * 运算符,我相信您会想要:

    "test: " * string(bar)
    

    【讨论】:

    • 谢谢,对我来说最后一个选项似乎是最有用的一个
    • 我认为带字符串的应该是性能最好的。
    • @DavidPSanders string 和字符串插值是等价的。
    【解决方案2】:

    您可以使用新方法扩展* 泛型函数,对Union{String, Number} 类型使用多次分派:

    julia> VERSION
    v"0.6.0-rc1.0"
    
    julia> *
    * (generic function with 181 methods)
    
    julia> const StrNum = Union{String, Number}
    Union{Number, String}
    
    julia> import Base: *
    
    julia> Base.:*(x::StrNum, y::StrNum) = string(x, y)
    
    julia> 4 * "2"
    "42"
    
    julia> "4" * 2
    "42"
    

    【讨论】:

    • 我是 Julia 的新手。你能解释一下如果/为什么println(foo, bar) 是个坏主意吗?或者没有达到 OP 的目标。谢谢。
    • @PatrickT println 将打印搅拌并返回 nothingstring 将返回字符串但不打印它,但是 REPL 始终显示最后一个值!返回字符串比打印它更有用,特别是如果您想继续对其进行操作。这只是 OP 如何定义自己的 * mehtod 或简单地使用 string 的示例。
    • 我是 Julia 的新手。 1.import Base: *里面为什么会有:。该语句类似于 python 中的from libname import utility 吗? 2.在Base.:*,你又用了:,多了一个.。它们的意义是什么?谢谢
    • @dpk :** 的符号。 Base.something 表示来自 Base 的东西。
    • @dpk 编辑:@dpk 广告 1。你是对的。广告 2。:** 的符号。 Base.something 表示来自Base 的东西。 Base.:* 表示 :* 来自 Base。 SalchiPapa 想要为来自 Base 的 * 运算符实现新方法。这是如何实现它的语法。如何不使用操作符,而是“谈论”操作符。
    猜你喜欢
    • 1970-01-01
    • 2012-07-18
    • 2011-02-20
    • 2016-04-15
    • 1970-01-01
    • 2012-12-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多