В Ruby, каковы вертикальные линии? - PullRequest
5 голосов
/ 23 августа 2010
1.upto(9) { |x| print x }

Почему это не сработает?

{ print x |x} }

А как же y?

Ответы [ 4 ]

7 голосов
/ 23 августа 2010

Это для параметров, которые передаются в ваш блок.т. е. в вашем примере upto будет вызывать ваш блок с каждым номером от 1 до 9, и текущее значение будет доступно как x.

Параметры блока могут иметь любое имя, как и параметры метода.Например, 1.upto(9) { |num| puts num } является действительным.

Так же, как параметры метода, вы также можете иметь несколько параметров для блока.например,

hash.each_pair { |key, value| puts "#{key} is #{value}" }
2 голосов
/ 23 августа 2010

Вертикальные линии используются для обозначения параметров блока.Блок - это код, заключенный в {}.Это действительно синтаксис блока ruby, параметры блока, а затем код.

1 голос
/ 23 августа 2010

Это не оператор; это разделение списка аргументов для блока. Слитки эквивалентны паренсу в def foo(x). Вы не можете написать это как {print x |x} по той же причине:

def foo(x)
  puts "It's #{x}"
end

нельзя переписать так:

def foo
  puts "It's #{x}" (x
end
0 голосов
/ 23 августа 2010

В указанном вами фрагменте кода вертикальные линии являются частью синтаксиса определения блока.Таким образом, { |x| print x } является блоком кода, предоставляемым в качестве параметра для метода upto, 9 также является параметром, передаваемым в метод upto.

Блок кода представлен lambda или объектом класса Proc в Ruby.lambda в данном случае является анонимной функцией.

Итак, просто проведем аналогию с синтаксисом определения функции,

def function_name(foo, bar, baz)
  # Do something
end


{       # def function_name (Does not need a name, since its anonymous)
|x|     #   (foo, bar, baz)
print x #   # Do Something
}       # end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...