Ruby中的字符串转换方法

在Ruby中,你可以使用各种方法来转换字符串。下面是一些常用的方法,当然选择哪种适用的方法还得更具具体项目来做调整。日常使用中下面的错误也是比较常见的,看看我们怎么处理哈。

在这里插入图片描述

1、问题背景

在Python中,内置的数据结构都有一个内置的to-string方法,当打印一个变量时,字符串会被方便地格式化为反映所用的数据结构。例如:

>>>$ python
Python 2.6.4 (r264:75706, Dec  7 2009, 18:45:15)
[GCC 4.4.1] on linux2
Type "help", "copyright", "credits" or "license" for more information.
$>>> a = [1,2,3,4]
$>>> str(a)
'[1, 2, 3, 4]'
$>>> print a
[1, 2, 3, 4]
$>>> d = { "a":"a", "b":"b", 1:5 }
$>>> str(d)
"{'a': 'a', 1: 5, 'b': 'b'}"
$>>> print d
{'a': 'a', 1: 5, 'b': 'b'}
$>>> x = [1, 23, 4]
$>>> print x
[1, 23, 4]

请注意,当我打印a时,值是[1, 2, 3, 4]。

然而,在Ruby中,当我尝试做同样的事情时,我得到了这样的结果:

>>>$ irb
irb(main):001:0> x = [1,23,4]
=> [1, 23, 4]
irb(main):002:0> x.to_s
=> "1234"
irb(main):003:0> puts x
1
23
4 
=> nil
irb(main):004:0> print x
1234=> nil
irb(main):005:0> h = { "a" => "a", 1 => 5, 'b'=>'b' } 
=> {"a"=>"a", "b"=>"b", 1=>5}
irb(main):006:0> print h 
aabb15=> nil
irb(main):007:0> h.to_s
=> "aabb15"
irb(main):008:0> puts h
aabb15
=> nil
irb(main):009:0>

如您所见,to_s方法没有格式化。此外,如果我调用to_s对[1,2,3,4]和[1,23,4]和[1234]进行比较,则存在唯一性问题,因为to_s将所有元素都聚集在一起,因此它们最终都变成“1234”。我知道我可以尝试通过覆盖to_s方法(“[+ a.join(",") + ]” #仅适用于数组)来模拟Python内置的to-string方法,但我想知道是否有更好的选择,因为破解它似乎违反了convention-over-configuration的概念。

那么,有没有Ruby等价于Python的内置to-string方法?

2、解决方案

在Ruby中,通常有四种方法可用于获取对象的字符串表示形式。

**1、#to_str:**这是Ruby的标准类型转换协议的一部分(类似于to_int、to_ary、to_float、……)。仅当对象实际上确实是一个字符串但由于某种原因不是String类的实例时才使用它。它非常罕见。事实上,在整个核心库中,只有String类本身的空操作实现。

**2、#to_s:**这也是Ruby的标准类型转换协议的一部分(类似于to_i、to_a、to_f、……)。如果对象有一些合理的字符串表示,则使用它。它实际上不必是一个字符串。几乎所有对象都应该响应。

**3、Kernel#String(obj):**这也是Ruby的标准类型转换协议的一部分(类似于Kernel#Integer(obj)、Kernel#Array(obj)、Kernel#Float(obj)、……)。它与obj.to_s相同。

**4、#inspect:**它应该返回对象一个适用于调试目的的人类可读描述。换句话说:它是用于检查对象(duh)。

有三种方法用于打印对象:

**1、Kernel#print(obj, …):**打印所有obj,用 ,分隔,并以 ,分隔,并以 ,分隔,并以,作为结尾。如果obj不是String,print将首先调用obj.to_s。

**2、Kernel#puts(obj, …):**基本上等同于$stdout.puts(obj, …)。它也打印obj,但通常使用换行符将它们分隔开。但是,它还有一些特殊情况的行为,特别是它通过在新行上打印每个项目来特殊处理数组。

**3、Kernel#p(obj, …):**类似于puts,但对所有obj调用#inspect。

除了这些之外,标准库中还有pp(pretty print)库,它添加了一个Kernel#pp(obj, …)方法。

然后,还有awesome_print库和hirb。

这些只是Ruby中字符串转换的一些常见方法,还有其他更多的方法可供探索和使用。如果大家有更多的问题可以留言讨论。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/8790.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

成功解决:Could not install packages due to an OSError

成功解决:Could not install packages due to an OSError: 错误: ERROR: Could not install packages due to an OSError: [Errno 2] No such file or directory: C:\Users\XIAODA~1\AppData\Local\Temp\pip-install-yeyhod79\opencv-contribpython_fb…

C++:位图和布隆过滤器

一,位图 1.1 位图的概念 究竟什么是位图呢??我们用一道问题来引入 问题:给40亿个不重复的无符号整数,没排过序。给一个无符号整数,如何快速判断一个数是否在 这40亿个数中。【腾讯】 根据这个问题&#x…

通俗易懂讲解 nginx-rtmp-module 是干嘛的?

文章目录 概述安装 nginx 和 nginx-rtmp-module配置 Nginx启动 Nginx使用示例推流拉流转码鉴权与安全自动录制 概述 nginx-rtmp-module 是一个用于 Nginx 的第三方模块,它扩展了 Nginx 服务器的功能,使其能够处理实时流媒体数据,特别是支持 …

【LeetCode】环形链表I 环形链表II

一、环形链表I 题目 思路 该题使用快慢指针 slow、 fast slow 走一步 ,fast 走两步 当fast 走到空 或者 fast的下一个结点为空, 则无环 fast若追上slow , 则有环 结论证明 该思路默认了 : 若存在环形链表 , 无论…

代码随想录算法训练营第二十一天:树树树

代码随想录算法训练营第二十一天:树树树 ‍ 513.找树左下角的值 力扣题目链接​**(打开新窗口)** 给定一个二叉树,在树的最后一行找到最左边的值。 示例 1: ​​ 示例 2: ​​ #算法公开课 《代码随想录》算法视频公开课…

领域驱动设计架构演进

领域驱动设计由于其强调对领域的深入理解和关注业务价值,其架构演进依赖于领域的变化和特定领域中的技术实践。 初始阶段 一个单体架构,所有的功能都集成在一个应用程序中,领域模型可能还不完全清晰,甚至并未形成。这个阶段主要是为了验证产品的可行性,快速迭代并尽快推…

OpenCV单窗口并排显示多张图片

OpenCV单窗口并排显示多张图片 效果代码 PS:本例的代码适合图片的宽度和高度都相同。 效果 原始三张图片: 合并显示: 代码 import cv2 import numpy as npdef opencv_multi_img():# 读取图片img1 cv2.imread(saw_1.jpeg)img2 cv2.im…

【爬虫】爬取A股数据写入数据库(二)

前几天有写过一篇 【爬虫】爬取A股数据写入数据库(一),现在继续完善下,将已有数据通过ORM形式批量写入数据库。 2024/05,本文主要内容如下: 对东方财富官网进行分析,并作数据爬取,使…

【高阶数据结构(二)】初识图论

💓博主CSDN主页:杭电码农-NEO💓   ⏩专栏分类:高阶数据结构专栏⏪   🚚代码仓库:NEO的学习日记🚚   🌹关注我🫵带你学习更多Go语言知识   🔝🔝 高阶数据结构 1. 前言2. 图的基…

LED显示屏控制器5个问题和解答

在LED电子显示屏的使用和维护过程中,用户经常会遇到各种技术问题。以下是五个关于LED电子显示屏控制器的常见问题及其解答,由专业LED显示屏生产厂家提供,旨在帮助用户更好地理解和使用LED显示屏。 1. 嵌入式实时脱机二合一控制器的工作原理 嵌…

SpringCloud Alibaba Sentinel 修改Dashboard用户名和密码

目录 一、下载Sentinel的Jar包 二、在启动时修改用户名和密码的命令 三、测试登录成功 在网上找到了一大堆文章,没一个有用的,最终还是通过不断测试找到了这个方法。 一、下载Sentinel的Jar包 Releases alibaba/Sentinel GitHub 二、在启动时修改…

并发问题系统学习(更新中)

进程、线程 进程:进程是代码在数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位。可以理解为一个java应用。 线程:线程是进程的一个执行路径,一个进程中至少有一个线程,进程中的多个线程共享进程的资源。…

C++笔试强训day15

目录 1.平方数 2.分组 Check函数的具体实现&#xff1a; 3.拓扑排序 1.平方数 链接 数学找规律&#xff0c;找离 x 最近的完全平方数 y。 先开平方根再利用四舍五入进位即可。 详细代码&#xff1a; #include <cmath> #include <iostream> using namespac…

【吊打面试官系列】Java高并发篇 - 你对线程优先级的理解是什么?

大家好&#xff0c;我是锋哥。今天分享关于 【你对线程优先级的理解是什么&#xff1f;】面试题&#xff0c;希望对大家有帮助&#xff1b; 你对线程优先级的理解是什么&#xff1f; 每一个线程都是有优先级的&#xff0c;一般来说&#xff0c;高优先级的线程在运行时会具有优先…

基于C语言中的类型转换,C++标准创造出了更加可视化的类型转换

目录 前言 一、 C语言中的类型转换 二、为什么C需要四种类型转换 三、C中新增的四种强制类型转换操作符以及它们的应用场景 1.static_cast 2.reinterpret_cast 3.const_cast 4.dynamic_cast 前言 在C语言中&#xff0c;如果赋值运算符左右两侧的类型不同&#xff0c;或者…

新书速览|图神经网络基础、模型与应用实战

掌握PyTorch图神经网络基础与模型&#xff0c;实战自然语言处理、计算机视觉、推荐系统、社交网络应用开发 01 本书内容 图神经网络不仅能够解决传统机器学习方法无法解决的图数据问题&#xff0c;而且能够应用于许多实际场景&#xff0c;例如社交网络、药物发现、网络安全、…

Yii2 自动生成php代码

文档地址&#xff1a;入门&#xff08;Getting Started&#xff09;: 用 Gii 生成代码&#xff08;Generating Code with Gii&#xff09; - Yii 2.0 权威指南 - 文档 - Yii Framework 中文网 找到配置文件&#xff0c;以我的项目为例&#xff1a; 因为的是开启了路由美化所以访…

【前端热门框架【vue框架】】——对组件进行更加简洁合理的处理和解释(一)

&#x1f468;‍&#x1f4bb;个人主页&#xff1a;程序员-曼亿点 &#x1f468;‍&#x1f4bb; hallo 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍&#x1f4bb; 本文由 曼亿点 原创 &#x1f468;‍&#x1f4bb; 收录于专栏&#xff1a…

YOLOv5独家原创改进: 通用倒瓶颈(UIB)搜索块结合C3二次创新 | 轻量化之王MobileNetV4

💡💡💡创新点:轻量化之王MobileNetV4 开源 | Top-1 精度 87%,手机推理速度 3.8ms,原地起飞! 最主要创新:引入了通用倒瓶颈(UIB)搜索块,这是一个统一且灵活的结构,它融合了倒瓶颈(IB)、ConvNext、前馈网络(FFN)以及一种新颖的额外深度可分(ExtraDW)变体技…

Stable Diffusion WebUI 使用综述

前言 科技圈的风口年年都在变&#xff0c;前几年是区块链&#xff0c;后来是虚拟现实&#xff0c;元宇宙&#xff0c;web3&#xff0c;而现在是 AI&#xff0c;VR 曾经让我兴奋过&#xff0c;可惜它最终没能形成足够大的浪潮&#xff0c;离最终实现可能还很遥远。而 2022 年开…