不理解 Ruby ljust/rjust/center 方法

2024-05-22

我正在学习嵌套,我的任务是使每条新行都以缩进开头。这是我的代码,但它不起作用

$nestingDepth = 0

def logger description, &block
    puts "Beginning #{description}".rjust($nestingDepth)
    puts $nestingDepth
    $nestingDepth = $nestingDepth + 10
    result = block.call
    $nestingDepth = $nestingDepth - 10
    puts $nestingDepth
    puts "End of #{description} block that returned #{result}".rjust($nestingDepth)
end

logger "first block" do 
    logger "second block" do
        logger "third block" do 
            puts "third block part"
        end
        puts "second block part"
    end
    puts "first block part"
end

您的代码有几个问题:

  • 您正在使用全局变量,这通常是一个坏主意,请将其作为参数传递下去。为此,您可以使用DSL定义记录器和日志方法的类。
  • 你正在打电话puts在块内,但您从未更改它的定义,我不明白您如何期望它打印缩进的字符串,它只会正常打印字符串而无需缩进。为此,您需要定义一个带有缩进打印的特殊方法,例如log
  • 你正在打电话rjust期望它会缩进字符串。此方法有不同的目的 - 以指定的长度将字符串向右对齐(即向左填充)。如果字符串超过指定长度,则返回原始字符串。要实际缩进一个字符串,你应该这样做puts ' ' * nestingDepth + string。乍一看很神奇,但*运算符只是重复字符串,例如'abc' * 3 #=> 'abcabcabc'

总的来说,我会这样做:

class DSL
  def initialize
    @depth = 0
  end

  def logger(description, &block)
    log "Beginning #{description}"
    @depth += 1
    result = instance_eval(&block)
    @depth -= 1
    log "End of #{description} that returned #{result}"
  end

  def log(string)
    puts indent + string
  end

  private

  def indent
    ' ' * (10 * @depth)
  end
end

def logger(*args, &block)
  DSL.new.logger(*args, &block)
end

Example:

logger "first block" do 
  logger "second block" do
    logger "third block" do 
      log "third block part"
    end
    log "second block part"
  end
  log "first block part"
end

这打印:

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

不理解 Ruby ljust/rjust/center 方法 的相关文章

  • Groovy 中的显式输入:有时还是从不?

    后来 仍然无法弄清楚 Groovy 是否具有静态类型 似乎没有 或者使用显式类型生成的字节码是否不同 似乎是 无论如何 回答这个问题 One of the main differences between Groovy and other
  • 避免在 Ruby 中自动从 Fixnum 转换为 Bignum

    我正在将算法从 C 移植到 Ruby 该算法有一个方法返回一个int有时会溢出 private static int NextRandom int n return 1234567890 n 12345 该算法利用溢出来避免该函数返回的值超
  • close 似乎不适用于 WebSocket

    我有这个简单的 JavaScript 代码 window ws new WebSocket ws 127 0 0 1 8000 ws onopen function ws send hello Ruby 中的服务器如下所示 require
  • 可以在哈希每个循环中访问索引吗?

    我可能遗漏了一些明显的东西 但是有没有办法访问哈希每个循环内迭代的索引 计数 hash three gt one four gt two one gt three hash each key value any way to know wh
  • 在 debian Squeeze 上安装 RoR

    有什么方法可以在我的 debian squeeze 上安装 Ruby 1 9 2 或 1 8 7 Rails 3 吗 您可能不想在生产计算机上使用 RVM 它的 PATH 魔力会在不明显的地方 例如 cron 作业 被破坏 然后你就会陷入困
  • 如何从 Ruby 检查具有特定 pid 的进程是否正在运行?

    如果有多种方法 请列出 我只知道一个 但我想知道是否有一种更干净的 Ruby 方式 之间的区别Process getpgid and Process kill方法似乎是当 pid 存在但由另一个用户拥有时发生的情况 Process getp
  • 如何从数组中删除空白元素?

    我有以下数组 cities Kathmandu Pokhara Dharan Butwal 我想从数组中删除空白元素并想要以下结果 cities Kathmandu Pokhara Dharan Butwal 有没有类似的方法compact
  • ruby on Rails,会话过期通知

    我正在使用 ruby 1 9 3 和 Rails 3 2 我的实际会话处理如下所示 会话助手 def sign in user cookies remember token value user remember token expires
  • 如何在 JS Rails 响应中包含 HTML?

    我有一个响应 HTML 和 JS AJAX 查询的 FooController app controllers foo controller rb class FooController lt ApplicationController l
  • 从类内部调用属性访问器方法[重复]

    这个问题在这里已经有答案了 我正在尝试调用我的类属性编写器之一 但由于某种原因它永远不会被调用 下面是一些代码 可以使这一点更清楚 class Test attr reader test def test val puts Called t
  • 带有附加参数的redirect_to

    我是一个菜鸟 redirect to users url notice Succeed p p 然后我添加一个message它失败了 redirect to users url notice Succeed message test p p
  • 回滚后是否应该删除迁移

    我对 ruby 和 Rails 相当陌生 刚刚开始了解迁移 我的问题是回滚后删除迁移的最佳实践或正确时间是什么 到目前为止 我读到的内容是回滚后是否删除迁移的观点问题 但是在团队中工作时删除迁移是否有任何重大影响 以及保留迁移文件相对于删除
  • class_eval、class_exec、module_eval 和 module_exec 之间有什么区别?

    我正在读Module文档 但似乎无法理解它们的差异以及应该在哪里使用 怎么样eval不同于exec 我将回答比你的问题更多的内容 包括instance eval exec 在你的问题中 所有变体 instance module class
  • 检查rails devise ldap gem中的组成员身份,是否在yaml中?

    我是否应该使用 ldap yml 文件来确保使用 ldap 进行身份验证的人拥有分配给他们的正确组以允许他们进入 无论如何 我都不是 AD 专业人士 这让我很困惑 什么是组和属性 据我了解 我们在 AD 中有一个用户 他们有一个 samAc
  • 为什么||和 或 在 Rails 中的行为有所不同? [复制]

    这个问题在这里已经有答案了 可能的重复 i true 和 false 在 Ruby 中是真的吗 https stackoverflow com questions 2802494 i true and false in ruby is tr
  • Rspec to have(n).items undefined 方法

    我正在尝试遵循指南关于代码 tuts http code tutsplus com tutorials ruby for newbies testing with rspec net 21297我不断收到错误 这是我的库规范 require
  • 用于验证目的的动态查找方法

    我正在使用 Ruby on Rails 3 0 7 我想在运行时查找一些记录以进行验证 但为该查找方法传递 设置一个值 也就是说 在我的班级中 我有以下内容 class Group lt lt ActiveRecord Base valid
  • 将“Authorization Bearer”哈希添加到 Net::HTTP post 请求 (Ruby)

    我怎样才能添加Authorization Bearer到 POST 请求Net HTTP 我只能在文档中找到 基本身份验证 的帮助 req basic auth user pass Source https docs ruby lang o
  • 默认:Rails 资源路由的排除选项

    一个小问题 我正在将 Rails 用于 REST API 但由于它是 RESTful API 所以我并不真正需要 new or edit我的任何资源的路由 因为人们只会完全通过自动 JSON 请求而不是图形方式与此 API 交互 例如 不需
  • Chef - 使用动态变量创建模板?

    我在厨师食谱上遇到了一些挑战 我是厨师新手 所以请耐心等待 第 1 步 我的厨师食谱安装 Ruby Passenger 然后与 Nginx 一起编译 Passenger nginx 模块 Install passenger and ngin

随机推荐

  • 如何使用 Beyond Compare 3 作为 svn 的 diff3-cmd?

    I saw this https stackoverflow com questions 294286 how to use svn with beyond compare 3帖子解释了如何让 BC3 作为 Subversion 的 dif
  • 获取用户最近城市的最佳方式? Python/Django

    我有一个数据库中城市数量有限的网站 需要向用户显示距离他当前位置最近的城市 我可以通过 MaxMind API 获取位置 但我想获取数据库中距用户城市最近的城市 例如 如果我的数据库中有这些城市 Los Angeles San Franci
  • 如何在Python中处理xpath中的单引号和双引号

    我有一个 XPath 它在 XPath 中有一个单引号 这会导致SyntaxError error 我尝试过转义序列 xpath label contains text Ayuntamiento de la Vall d Uix Festi
  • NS_ERROR_XPC_BAD_CONVERT_JS

    在尝试将 appendChild 添加到刚刚创建的元素 在 for 循环中 后 我收到此错误 这个错误是什么意思 我想不可能附加某物 到 DOM 中并不真正存在的元素 我如何解决它 innerHTML 有效 但我认为这不是真正干净且正确的方
  • 如何将Excel中的每个条目转换为一行“矩阵”表

    我有类似的东西 1 2 3 a x o x b x x o c o o o 并想将其转换成像这样的线 1 a x 1 b x 1 c x 2 a o 2 b x 2 c o 3 a x 3 b o 3 c o 通过使用Excel文档中的公式
  • 使下划线 CSS 过渡改变方向

    我正在使用我找到的一些风格这个网站 http callmenick com post simple css3 transitions transforms animations compilation创建有效的下划线幻灯片 请参见jsfid
  • 使用Git记录文件复制操作

    当我使用 git mv 在 git 中移动文件时 状态显示该文件已被重命名 即使我更改了某些部分 它仍然被认为几乎是相同的东西 这很好 因为它让我可以跟踪它的历史记录 当我复制文件时 原始文件有一些历史记录 我想将其与新副本关联起来 我尝试
  • Node Sequelize - “按原样”插入日期而不转换为 UTC

    我正在尝试运行一个简单的查询 例如 Insert into table somedate values 2018 06 11 23 59 00 但 Sequelize 将其执行为 Insert into table somedate val
  • 发送&查询字符串

    从first jsp 我将一些参数发送到result jsp 如下所示 a href Show Items a 这里 item itemName 可以有类似的值 食品和文具 当项目名称包含 时 我无法在结果页面上获取整个值 仅打印它 foo
  • showOptionDialog 之后将焦点返回到 JTable 内的 JComboBox

    我遇到了问题JComboBox用作CellEditor for a JTable 我想要编辑后JComboBox并按tab显示一个OptionsDialog并且 如果选择了特定选项 则焦点仍将集中在JComboBox 问题是由于选项卡焦点移
  • 未捕获的类型错误:无法读取 null 的属性值[重复]

    这个问题在这里已经有答案了 我是 jQuery 新手 我正在尝试创建一个登录表单 当用户输入简短的用户名时 该表单会切换文本 这是我的代码 当我单击按钮时什么也没有发生 我检查了控制台 它在我的代码中的特定行上显示了标题上的错误 我也检查了
  • GDI 函数 BitBlt 和 StretchBlt 在 Win32 中是否硬件加速?

    我似乎无法通过搜索得到明确的答案 Win32 blitting 操作是否硬件加速 GDI 而不是 GDI 我不知道这些函数如何与图形驱动程序交互 是否有任何函数调用来验证此功能 例如 GetCaps 对于特定的图形设备 win32图形设备
  • 使用另一个 MEF 程序集中的类而不引用它

    我有 2 个 MEF 组件 设其为A成分和B成分 我需要的是能够从组件 A 中的组件 B 访问一个类 而不需要引用它 然后我想手动实例化该类的对象 目前我看到 MEF 允许使用 Import 自动实例化对象 它使用需要引用的接口 我可以使用
  • 电话 GAP 会话存储

    我使用手机 GAP 开发 iPhone 应用程序 在我的应用程序中 我们使用外部数据库 用户使用 Web 服务登录 登录后我需要存储用户 ID 我如何使用手机 GAP 存储用户 ID 我可以使用手机 GAP会话存储可以吗 哪位知道的请帮忙
  • 将 Scala Future 转变为 CompletableFuture

    我的项目中有一个 Akka 层 它返回Scala Future 而接收 Future 的部分是 Java 风格的 团队中的人不了解 Scala 他们宁愿使用CompletableFuture因为他们更了解 Java 8 API 有没有什么好
  • Matplotlib:如何在 y 轴上绘制分类数据?

    假设我有以下代码 它来自here https stackoverflow com questions 29508208 best way to plot categorical data answertab active tab top g
  • 以字符串数组作为参数的操作

    我想调用与此 uri 类似的操作 http server controller action columns firstname columns lastname columns age 并像这样使用它 public ActionResul
  • 确保 Clojure 中只有一个服务实例正在运行/启动/停止的规范方法?

    我正在用 Neo4j 支持的 Clojure 编写一个有状态服务器 它可以服务套接字请求 例如 HTTP 当然 这意味着我需要能够从该服务器内启动和停止套接字服务器 在设计方面 我希望能够在此服务器中声明一个 服务 并启动和停止它 我在 C
  • 如果警告数量超过一定限制,AzureDevOps 构建管道将失败

    我热衷于不让项目质量失控 我知道在某些情况下警告可能有意义 但我担心警告的数量会随着时间的推移而增加 我有一个 Azure DevOps 构建 门控提交 管道 我只想允许 10 个警告 以便在某些时候开发人员必须解决他们的警告 有没有办法对
  • 不理解 Ruby ljust/rjust/center 方法

    我正在学习嵌套 我的任务是使每条新行都以缩进开头 这是我的代码 但它不起作用 nestingDepth 0 def logger description block puts Beginning description rjust nest