Как в Ruby 1.8.6 разграничить обычные символы и символы в кавычках? - PullRequest
0 голосов
/ 17 июня 2019

Например, :"foo" против :foo.

Точнее, если у меня есть строка типа "Clarinet (B♭)", и я звоню .to_sym, я получаю символ в кавычках с экранированными символами: :"Clarinet (B\342\231\255)". В этом случае я хотел бы использовать строковую версию, а не символьную версию, в качестве хеш-ключа. В более общем случае, если я получу любой символ в кавычках, я хочу вообще не использовать этот символ, а просто использовать исходную строку.

1012 * например *

ahash = {}
s = "Clarinet (B♭)"
sym = s.to_sym
if some_test_for_quoted_symbols
  ahash[sym] = "foo"
else
  ahash[s] = "foo"
end

Кто-нибудь знает, как я могу различать символы с кавычками или без них? Спасибо

PS Пожалуйста, не говорите мне, что я не должен использовать такую ​​старую версию Ruby. спасибо!

1 Ответ

0 голосов
/ 17 июня 2019

Как и сказал Хелвуд в комментариях символы с кавычками или без них идентичны.

:foo == :"foo" #=> true

Причина, по которой Ruby отображает некоторые символы с кавычками, а другие - без кавычек, связана с их содержанием.Символы, которые соответствуют стандартам имен методов , будут отображаться без кавычек, а символы, которые не соответствуют формату, отображаются с кавычками.

Это означает, что:

# operators are displayed without quotes
:">>" #=> :>>
# snake case naming will be displayed without quotes
:"foo_bar" #=> :foo_bar

# symbols starting with a number will be displayed with quotes
:"8bit" #=> :"8bit"
# symbols with certain characters will be displayed as quoted
:"foo-bar" #=> :"foo-bar"
:"foo bar" #=> :"foo bar"
:"null_byte_\0" #=> :"null_byte_\x00"

Метод Имена

Метод Имена могут быть одним из операторов или должны начинаться с буквы или символас восьмибитным набором.Он может содержать буквы, цифры, _ (подчеркивание или нижняя строка) или символ с восьмибитным набором.Соглашение заключается в использовании подчеркиваний для разделения слов в имени метода с несколькими словами:

def method_name
  puts "use underscores to separate words"
end

Программы на Ruby должны быть написаны в совместимом с US-ASCII наборе символов, таком как UTF-8, ISO-8859-1 и т. Д.В таких наборах символов, если установлен 8 бит, это указывает на расширенный символ.Ruby позволяет именам методов и другим идентификаторам содержать такие символы.Программы на Ruby не могут содержать некоторые символы, такие как ASCII NUL (\x00).

Ниже приведены примеры допустимых методов Ruby:

def hello
  "hello"
end

def こんにちは
  puts "means hello in Japanese"
end

Обычно имена методов совместимы с US-ASCII, поскольку ключичтобы их можно было ввести на всех клавиатурах.

Метод имена могут заканчиваться ! (удар или восклицательный знак), ? (знак вопроса) или = (знак равенства).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...