Что делает различные скобки в среднем Ruby?

Если вашему сертифицированному файлу сервера не доверяют (например, вы можете создать хранилище ключей самостоятельно с помощью команды keytool в java), вы должны добавить дополнительную опцию rejectUnauthorized

var socket = io.connect('https://localhost', {rejectUnauthorized: false});
83
задан the Tin Man 4 December 2014 в 05:32
поделиться

6 ответов

Это зависит от контекста:

  1. то, Когда самостоятельно, или присваивающий переменной, [] создает массивы, и {}, создает хеши. например,

    a = [1,2,3] # an array
    b = {1 => 2} # a hash
    
  2. [] может быть переопределен как пользовательский метод и обычно используется для выборки вещей от хешей (стандартная библиотека настраивает [] как метод на хешах, который совпадает с fetch)
    существует также соглашение, что это используется в качестве метода класса таким же образом, Вы могли бы использовать static Create метод в C# или Java. например,

    a = {1 => 2} # create a hash for example
    puts a[1] # same as a.fetch(1), will print 2
    
    Hash[1,2,3,4] # this is a custom class method which creates a new hash
    

    См. документы Хеша Ruby для того последнего примера.

  3. Это - вероятно, самое хитрое - {}, также синтаксис для блоков, но только, когда передано методу ВНЕ аргументов parens.

    , Когда Вы вызываете методы без parens, взгляды Ruby на то, куда Вы помещаете запятые для выяснения, где аргументы заканчиваются (тому, где parens был бы, ввели Вас их)

    1.upto(2) { puts 'hello' } # it's a block
    1.upto 2 { puts 'hello' } # syntax error, ruby can't figure out where the function args end
    1.upto 2, { puts 'hello' } # the comma means "argument", so ruby sees it as a hash - this won't work because puts 'hello' isn't a valid hash
    
70
ответ дан the Tin Man 24 November 2019 в 08:55
поделиться

Вообще говоря Вы корректны. А также хеши, общий стиль - то, что фигурные скобки {} часто используются для блоков, которые могут соответствовать всем на одну строку, вместо того, чтобы использовать do / end через несколько строк.

Квадратные скобки [] используются в качестве методов класса в большом количестве классов Ruby, включая Строку, BigNum, Dir и смутно достаточно, Хеш. Так:

Hash["key" => "value"]

так же допустимо как:

{ "key" => "value" }
9
ответ дан the Tin Man 24 November 2019 в 08:55
поделиться

Квадратные скобки [] используются для инициализации массивов. Документация для случая инициализатора [] находится в

ri Array::[]

, фигурные скобки {} используются для инициализации хешей. Документация для случая инициализатора {} находится в

ri Hash::[]

, квадратные скобки являются также наиболее часто используемыми как метод во многих базовых рубиновых классах, как Массив, Хеш, Строка и другие.

можно получить доступ к списку всех классов, которые имеют метод" []" определенный с

ri []

, большинство методов также имеет" [] =" метод, который позволяет присваивать вещи, например:

s = "hello world"
s[2]     # => 108 is ascii for e
s[2]=109 # 109 is ascii for m
s        # => "hemlo world"

Фигурные скобки могут также использоваться вместо, "действительно... заканчиваются" на блоках, как "{...}".

Другой случай, где Вы видите квадратные скобки или используемые фигурные скобки - находится в специальных инициализаторах, где любой символ может использоваться, как:

%w{ hello world } # => ["hello","world"]
%w[ hello world ] # => ["hello","world"]
%r{ hello world } # => / hello world /
%r[ hello world ] # => / hello world /
%q{ hello world } # => "hello world"
%q[ hello world ] # => "hello world"
%q| hello world | # => "hello world"
3
ответ дан Evgeny 24 November 2019 в 08:55
поделиться

несколько примеров:

[1, 2, 3].class
# => Array

[1, 2, 3][1]
# => 2

{ 1 => 2, 3 => 4 }.class
# => Hash

{ 1 => 2, 3 => 4 }[3]
# => 4

{ 1 + 2 }.class
# SyntaxError: compile error, odd number list for Hash

lambda { 1 + 2 }.class
# => Proc

lambda { 1 + 2 }.call
# => 3
2
ответ дан James A. Rosen 24 November 2019 в 08:55
поделиться

Другой, не настолько очевидный, использование [] как синоним для Proc#call и Method#call. Это могло бы немного путать в первый раз, когда Вы встречаетесь с ним. Я предполагаю, что рациональное позади него - то, что это заставляет его больше походить на нормальный вызов функции.

Например.

proc = Proc.new { |what| puts "Hello, #{what}!" }
meth = method(:print)

proc["World"]
meth["Hello",","," ", "World!", "\n"]
21
ответ дан the Tin Man 24 November 2019 в 08:55
поделиться

Обратите внимание, что вы можете определить метод [] для своих собственных классов:

class A
 def [](position)
   # do something
 end

 def @rank.[]= key, val
    # define the instance[a] = b method
 end

end
2
ответ дан 24 November 2019 в 08:55
поделиться
Другие вопросы по тегам:

Похожие вопросы: