【问题标题】:How to represent a value with symbol in ruby?如何在 ruby​​ 中用符号表示一个值?
【发布时间】:2021-02-05 11:26:28
【问题描述】:

我在这里尝试用 ruby​​ 做一个简单的服务器。

我正在考虑使用符号来使代码更高效。但是我遇到了一个我不明白的问题。我尝试了在线资源和其他我可以得到的东西,但它似乎对我的问题没有帮助。

正如您在第 8 行中看到的,我用同名符号表示变量路径。但是当我在第 12 行显示它时,它显示的是单词路径而不是它所代表的符号的值。

我还有一个疑问。据我所知,我们可以用两种方式表示符号,一种是冒号在名称前面(如:symbol)和在名称末尾(如符号:)。但是当我尝试使用第二种表示形式(如符号:) 放置输出时,它会导致错误为 server_beta.rb:14: syntax error, unexpected keyword_end server_beta.rb:24:语法错误,意外的输入结束,期待关键字结束。

如果有人能解释这一点,那将是一个很大的帮助。提前感谢您的帮助

  5 def parse(request)
  6   method, path, version = request.lines[0].split
  7     {
  8     path: path,
  9     method: method
 10   }
 11 
 12     puts :path #Variation 1
 13     puts path: #Variation 2
 14 end

输出: 路径(变体 1)

【问题讨论】:

  • 是的..正如错误所说..它是一个语法错误..它只是完全错误..你只能这样做puts path

标签: ruby-on-rails ruby server tcp symbols


【解决方案1】:

我认为您对 Ruby 和 Rails 中的某些约定使用符号感到困惑。

符号不是变量。变量用于存储值。符号是字符串的重量较轻的版本。它们可以用来代替哈希键等位置的字符串。

hash1 = {'name' => 'Mary', 'age' => 30}
puts hash1['name']
#=> 'Mary'

hash2 = {:name => 'John', :age => 32}
puts hash2[:age]
#=> '32'

Ruby 引入了一种新的哈希表示法,以便在使用哈希表示法消除“哈希火箭”的符号时让事情变得更简洁 =>

hash2 = {name: 'John', age: 32}

为了利用 Rails 中的约定,他们提出了“具有无关访问的哈希”。所以它是一个散列,允许您在散列中互换使用字符串或其符号版本:

hash2 = = ActiveSupport::HashWithIndifferentAccess.new
hash2['name'] = 'John'
puts hash2[:name]
#=> 'John'
puts hash2['name']
#=> 'John'

在 Rails 中,您可以使用符号为表中的列赋值:

p = Person.new(name: 'John', age: '32')

然后,您可以通过作为列名的字符串版本的方法名来访问它们:

把 p.name #=> '约翰'

我认为您缺少一些真正的 Ruby 基础。我会更多地研究这一点,然后可能会做一个涉及重建 Rails 的教程,以便您了解 Ruby 的语法与 Rails 中的约定之间的关系。

【讨论】:

    猜你喜欢
    • 2020-09-18
    • 2011-05-24
    • 1970-01-01
    • 2010-10-04
    • 1970-01-01
    • 2022-06-22
    • 2016-12-30
    • 1970-01-01
    • 2018-04-05
    相关资源
    最近更新 更多