如何用 ruby 中的符号表示一个值?

How to represent a value with symbol in ruby?

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

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

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

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

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

  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)

我认为您对 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 中,您使用以下符号将值分配给 table 中的列:

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

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

放p.name #=> 'John'

我认为您缺少 Ruby 的一些真正基础。我会研究更多,然后可能会做一个涉及重建 Rails 的教程,这样你就会看到 Ruby 的语法与 Rails.

中的约定有何关系