Julia 似乎没有使用字符串来执行插值

2024-04-17

官方文档指出:

连接和字符串插值调用string()将对象转换为字符串形式

然而,以下最小工作示例似乎证明了其他情况:

type MyType
    x::Int
end
import Base.string
Base.string(m::MyType) = "world"
m = MyType(4)
println("hello $m")
println("hello " * string(m))

倒数第二行的计算结果为hello MyType(4)在 REPL 中,而最后一行的计算结果(如预期)为hello world.

那么我做错了什么?

(我仍在使用 v0.4,但官方文档版本表明这应该没有任何区别。)


该文档是完全正确的:

julia> expand(:(println("hello $m")))
:(println((Base.string)("hello ",m)))

也就是说,println("hello $m") is 相等的 to println(string("hello", m))。当代码被编译或解释时,它们是同一件事。

然而,你的超载

Base.string(m::MyType) = "world"

不是正确的超载方式string。此方法仅涵盖具有单个类型参数的情况MyType。 (顺便说一句,这就是为什么您的代码似乎适用于串联:该特定示例涉及调用string就一个论点而言。如果你写的话结果会是一样的"$m".) 正确的重载方法是

Base.show(io::IO, m::MyType) = print(io, "world")

乍一看这可能看起来很奇怪。必须重载的原因是因为string代表print其委托给show.

将您的最小工作示例更新为

type MyType
    x::Int
end
Base.show(io::IO, m::MyType) = print(io, "world")
m = MyType(4)
println("hello $m")
println("hello " * string(m))

结果正如预期的那样。


作为脚注,请注意您的示例可以更高效地编写为

println("hello ", m)

这避免了创建中间字符串。这说明why该系统的设置是为了string calls print哪个调用show:IO 方法更通用,可以直接打印到各种形式的 IO,而如果反过来,则必须在发送到 IO 之前将内容转换为字符串(需要临时分配,因此性能较差)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Julia 似乎没有使用字符串来执行插值 的相关文章

  • 在 python 中使用 org.mpris.mediaplayer2.player PlaybackStatus 属性

    The 规格页 http specifications freedesktop org mpris spec latest Player Interface html summary对于这个特定的接口说 PlaybackStatus s P
  • 为什么我收到 string does not name a type 错误?

    game cpp include
  • C# 资源文件中的 Tab 键切换

    如何向字符串资源添加制表符 t text 不起作用 您必须显式添加制表符 最简单的方法可能是在记事本中键入字符串 显式设置制表符而不是使用转义字符 并将文本复制并粘贴到资源编辑器中 对于换行符 您也会遇到类似的问题 添加换行符的最简单方法是
  • 将 h1 元素的内容复制到剪贴板?

    所以 我做了一个翻译器 但效果不是很好 但无论如何 它正在工作 我想尝试添加一些可以复制结果的内容 有没有办法做到这一点 以下是我的代码 提前致谢 我知道有一种方法可以通过输入来完成此操作 但我不确定是否可以通过标题来完成 var myTe
  • Java 支持多行字符串吗?

    来自 Perl 我肯定缺少在源代码中创建多行字符串的 here document 方法 string lt lt EOF create a three line string text text text EOF 在 Java 中 当我从头
  • 估算缺失数据,同时强制相关系数保持不变

    考虑以下 excel 数据集 m r 2 0 3 3 0 8 4 0 1 3 2 1 5 2 2 3 1 9 2 5 1 2 3 0 2 0 2 6 我的目标是使用以下条件填充缺失值 将上述两列之间的成对相关性表示为 R 大约 0 68 将
  • R 中的匹配和计数字符串(DNA 的 k 聚体)

    我有一个字符串列表 DNA 序列 包括 A T C G 我想找到所有匹配项并插入到表中 该表的列都是这些 DNA 字母表的所有可能组合 4 k k 是每个匹配项的长度 K mer 必须由用户指定 行代表 DNA 字母表的数量在列表中按顺序匹
  • 如何判断Python对象是否是字符串?

    如何检查 Python 对象是否是字符串 常规字符串或 Unicode Python 2 Use isinstance obj basestring 对于要测试的对象obj Docs https docs python org 2 7 li
  • Java:带有 unicode 字符的 String.toCharArray()

    我知道 char 不能包含 Unicode 字符 例如 char c u1023 那么我该怎么做 String s ABCDEFG u1023 char c s toCharArray 出于性能原因 我想将 s 转换为 CharArray
  • 从 str 转换为 float 时保持尾随 0

    将带有尾随零的数字从字符串转换为浮点数时遇到以下问题 a 1 100 string a str a float a float string a float a 1 1 有没有办法将 str 转换为 float 同时保留末尾的尾随 0 首先
  • 基本 C++ 文本对齐

    我正在尝试编写一个程序 该程序从文件中获取输入行并使其恰好为 80 个字符 假设输入行始终小于 80 然后打印该行 这是通过在以下标点符号后添加最多两个空格来完成的 如果一行少于 41 个字符 则不加修改地打印 如果该行仍然不是 80 个字
  • 如何解码 dtype=numpy.string_ 的 numpy 数组?

    我需要使用 Python 3 解码按以下方式编码的字符串 gt gt gt s numpy asarray numpy string hello nworld gt gt gt s array b hello nworld dtype S1
  • 为什么 Haskell 的默认字符串实现是一个字符链接列表?

    Haskell 默认值的事实String众所周知 实现在速度和内存方面都效率不高 据我所知 lists一般来说 在 Haskell 中实现为单链表 并且适用于大多数小型 简单数据类型 例如Int 这似乎不是一个好主意 但是对于String这
  • 无法将参数从 `const char *` 转换为 `char *`

    鉴于此代码 void group build int size std string ips Build the LL after receiving the member list from bootstrap head new memb
  • 为什么 as.character() 返回日期列表中的整数?

    我惊讶地发现 R 中出现以下行为 as character c Sys Date gt 1 2018 02 05 as character list Sys Date gt 1 17567 为什么会出现这种情况 也就是说 显然 17567
  • 如何将 Python 字典序列化为字符串,然后再序列化回字典?

    如何将 Python 字典序列化为字符串 然后再序列化回字典 字典中将包含列表和其他字典 这取决于您想用它做什么 如果您只是想保存它 您应该使用pickle https docs python org 3 library pickle ht
  • 以点作为分隔符分割字符串

    我想知道我是否要在一个字符串上分割字符串 正确的方式 我的代码是 String fn filename split return fn 0 我只需要字符串的第一部分 这就是我返回第一项的原因 我问这个是因为我在 API 中注意到 意味着任何
  • 如何制作任意级别的嵌套for循环

    我可以像这样做一个两级嵌套循环 for i1 in 1 n for i2 in 1 n do something with i1 i2 如何将其扩展到任意级别的嵌套循环 例如 我可以在 Python 中执行此操作以循环 n m 的笛卡尔积
  • 删除字符串 C 的第一个字符

    我试图删除字符串的第一个字符并保留其余部分 我当前的代码无法编译 我对如何修复它感到困惑 My code char newStr char charBuffer int len strlen charBuffer int i 1 char
  • 将小数格式化为两位或整数

    对于 10 我想要 10 而不是 10 00 对于 10 11 我想要 10 11 没有代码可以实现吗 即通过指定格式字符串类似于 0 N2 decimal num 10 11M Console WriteLine num ToString

随机推荐

  • 在 Windows 上安装 gokogiri 时找不到错误 libxml2

    我正在尝试安装gokogiri https github com moovweb gokogiri在 Windows 8 机器上按照 github 页面中的说明进行操作 安装 sudo apt get install libxml2 dev
  • ofstream::open 什么时候会失败?

    我正在尝试在 C 中尝试 捕获 抛出语句进行文件处理 并且我编写了一个虚拟代码来捕获所有错误 我的问题是为了检查我是否正确 我需要发生错误 现在我可以轻松检查infile fail 只需不在目录中创建所需名称的文件即可 但我怎样才能检查同样
  • Java编译器选择错误的重载[重复]

    这个问题在这里已经有答案了 Test public void test MyProperties props new MyProperties props setProperty value new Date StringUtils isN
  • 更新实体框架中的数据库架构

    我安装了 VS SP1 并使用了实体框架 我从现有数据库创建了一个架构并尝试了一些基本操作 除了数据库架构更新之外 大部分进展顺利 我以各种基本方式更改了数据库 添加了一个新表 删除了一个表 向现有表添加新列 从现有表中删除一列 更改了现有
  • linux 日期命令中的无效日期错误

    在脚本中我使用命令 CURRENT DATE tmp date d CURRENT DATE Y m d 它给出了错误date invalid date Y m d 可能是什么原因 我知道变量 CURRENT DATE 有其值 date d
  • 使用所需的优化标志重新构建 Tensorflow

    预先感谢您的考虑 我刚刚使用以下命令安装了tensorflow 在已安装Ubuntu 16 04和CUDA 8 0的新机器上 程序 http www nvidia com object gpu accelerated application
  • 溢出-y滚动即使没有溢出也总是显示

    我正在做 与内容分开滚动 JQuery Mobile 面板 我做了什么 https forum jquery com topic scroll inside panel 我应用这个 css 来实现我所做的事情 但问题是 Overflow y
  • Celery + SQLAlchemy:DatabaseError:(DatabaseError)SSL错误:解密失败或坏记录mac

    当在启用 SSL 的 postgresql 数据库上使用 celery 和多个工作线程时 有时会触发标题错误 我使用 Flask SQLAlchemy 配置 正如这里提到的 https github com celery celery is
  • 防止 PHP 中的目录遍历但允许路径

    我有一个基本路径 whatever foo and GET path 应该是相对的 但是 如何在不允许目录遍历的情况下完成此操作 读取目录 eg 无法正确过滤 好吧 一种选择是比较真实路径 basepath foo bar baz real
  • Azure 文件存储内容类型始终为 application/octet-stream

    目前 当我使用以下内容构建 URL 时 我遇到了 Azure 文件存储问题共享访问签名 SAS 令牌 https learn microsoft com en us azure storage common storage dotnet s
  • 如何使用Python在多进程中运行pycuda

    我有一个可以在单个进程中运行的 pycuda 代码 python的多进程可以支持在多个子进程中运行这段代码吗 如果我尝试 我会发现我犯了一个错误 我做错了吗 我尝试用python的进程实现一个简单的多进程 发现会出错 import pycu
  • Java 反射调用原始类型的构造函数

    我的测试框架中有一个方法 可以根据传入的参数创建类的实例 public void test Object constructorArgs throws Exception Constructor
  • 如何在 Automapper 中使用数据集?

    我目前使用数据读取器作为源 但我想改用数据集 datareader AutoMapper Mapper CreateMap
  • 确定事务中无法执行的T-SQL/DDL

    有多种语句和系统过程无法在事务中执行 并出现错误消息 不允许 例如 create database 或 无法执行 例如 exec sp addrole 是否存在一条或一组规则来指示事务中是否不允许给定的过程 语句 有其列表吗 不是 Micr
  • 使用 AWS CodeBuild 构建 Windows 容器

    我正在开始使用 AWS 的 CI CD 功能 到目前为止 我已经基于 microsoft windowsservercore 映像在 Windows Server 2016 本地创建了 docker 映像 并将其手动推送到 ECR 亚马逊容
  • 内联块 div 中的文本将其向下推[重复]

    这个问题在这里已经有答案了 今天早上我发现了一个奇怪的 CSS 问题 我希望 CSS 专家能帮助我 在这个演示 http jsfiddle net 7HBCe 为什么红色 div 中的文本将其向下推 我预计这两个 div 会彼此相邻 谢谢
  • 删除Elasticsearch中类型的文档

    我想使用 HTTP REST api 删除 Elasticsearch 中某一类型中索引的所有文档 但我不想删除该类型的映射 如何在 URL 中构建查询来执行此操作 执行命令前 索引 映射状态 截图取自elasticsearch头插件网络界
  • 你能帮助解释我的 svn diff 输出吗?

    我正在使用 SVN DIFF 比较两个文件夹 一个在分支中 一个在主干中 目的是确定更改列表 然后我对分支中的文件进行了一些更改 但输出显示我已经在主干中修改了它们 为什么会出现这种情况 有没有更好的命令来获取我正在寻找的结果 我现在使用的
  • 具有 EasyIn 动画,然后按顺序缩放动画,因为缩放动画会永远重复

    我想要在 onAppear 上为文本信息和 SF 符号添加一个 escapeIn moveUp 动画 此后 我只希望 SF 符号永远按比例放大和缩小 目前 我已经设法永远缩小规模 但是当我设法链接时 easeIn moveUp 动画也会永远
  • Julia 似乎没有使用字符串来执行插值

    官方文档指出 连接和字符串插值调用string 将对象转换为字符串形式 然而 以下最小工作示例似乎证明了其他情况 type MyType x Int end import Base string Base string m MyType w