我可以像操纵字符串那样操纵符号吗?

时间:2015-06-26 04:02:58

标签: julia

问题:我可以根据字母或符号将符号分为两个符号吗?

示例:例如,我们说我有:symbol1_symbol2,我想将其_拆分为:symbol1和{ {1}}。这可能吗?

动机:Julia中相当常见的建议是使用:symbol2代替SymbolString,因为它对许多操作更有效。因此,我对可能发生故障的情况感兴趣,因为ASCIIString对于我们通常可能在Symbol执行的操作没有类似情况,例如与正则表达式有关。

1 个答案:

答案 0 :(得分:3)

不,你不能操纵符号。 它们不是复合类型(在逻辑上,尽管它们可能在实现中)。 他们是一回事。 就像一个整数就是一回事, 或布尔值是一回事。 你不能操纵它的部分。

据我了解,它们快速的原因是因为它是“一件事”。

符号不是字符串。 符号是解析的令牌的表示。 它们存在用于处理宏等。

它们对其他东西很有用。 虽然在0.3中最常见的改变用途是作为枚举的替代品。现在Enum是0.4,这个用途会下降。 它们在字典键等方面仍然很合适。

-

如果由于某种原因你必须。 例如,与第三方库互操作,或者进行某种动态调度:

您可以将其转换为String, 使用string(:abc),(目前没有convert), 然后返回Symbol("abc")

所以

function symsplit(s_s::Symbol)
    combined_string_from=string(s_s)
    strings= split(combined_string_from, '_')
    map(Symbol,strings)
end


@show  symsplit(:a)
@show  symsplit(:a_b)
@show symsplit(:a_b_c);

但请不要。

您可以通过调用methodswith(Symbol)找到对符号起作用的所有方法(尽管大多数只使用符号作为标记/枚举)

也可以看看:

What is a "symbol" in Julia?