【发布时间】: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
在 Julia 中连接字符串和整数值的最简单方法是什么?我想做类似的事情:
julia> foo = "test: "
"test: "
julia> bar = 3
3
julia> foobar = foo * bar
ERROR: `*` has no method matching *(::ASCIIString, ::Int64)
【问题讨论】:
标签: julia
我对 Julia 不是很熟悉,但我相信你最好使用字符串插值:
"test: $bar"
或者:
string("test: ", bar)
或者,如果您确实想使用 * 运算符,我相信您会想要:
"test: " * string(bar)
【讨论】:
string 和字符串插值是等价的。
您可以使用新方法扩展* 泛型函数,对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"
【讨论】:
println(foo, bar) 是个坏主意吗?或者没有达到 OP 的目标。谢谢。
println 将打印搅拌并返回 nothing,string 将返回字符串但不打印它,但是 REPL 始终显示最后一个值!返回字符串比打印它更有用,特别是如果您想继续对其进行操作。这只是 OP 如何定义自己的 * mehtod 或简单地使用 string 的示例。
import Base: *里面为什么会有:。该语句类似于 python 中的from libname import utility 吗? 2.在Base.:*,你又用了:,多了一个.。它们的意义是什么?谢谢
:* 是* 的符号。 Base.something 表示来自 Base 的东西。
:* 是 * 的符号。 Base.something 表示来自Base 的东西。 Base.:* 表示 :* 来自 Base。 SalchiPapa 想要为来自 Base 的 * 运算符实现新方法。这是如何实现它的语法。如何不使用操作符,而是“谈论”操作符。