str.each в Ruby не работает

Я изучаю Ruby.

Я нашел метод String#each по http://ruby-doc.org/core/classes/String.html.

Когда я пытаюсь использовать его...

irb(main):001:0> "hello\nworld".each {|s| p s}
NoMethodError: undefined method `each' for "hello\nworld":String

... но я получаю это NoMethodError.

Я использую Ruby 1.9.1p253, таким образом, я не думаю, что использую старую версию. Что продолжается?

21
задан Veger 20 January 2010 в 19:53
поделиться

4 ответа

работает в 1.8.7, не отображается в документах 1.9 - должно быть устарено.

Здесь мы идем: https://web.archive.org/web/20090423003136/http://eigenclass.org/hiki.rb?changes+in5ruby+1.9#L113

2
ответ дан 29 November 2019 в 20:03
поделиться

Ruby 1.9 больше не имеет каждый на строке класс. Используйте либо каждый_Чах или в каждом уровне в зависимости от того, что вы хотите сделать. Документы для Ruby 1.9 строки http://ruby-doc.org/core-1.9.3/string.html .

35
ответ дан 29 November 2019 в 20:03
поделиться

Я разрешил эту самую ошибку на Java 1,6 следующей строкой:

// Specify you want a factory for RELAX NG "compact"
System.setProperty(SchemaFactory.class.getName() + ":" + XMLConstants.RELAXNG_NS_URI, "com.thaiopensource.relaxng.jaxp.CompactSyntaxSchemaFactory");

SchemaFactory factory = SchemaFactory.newInstance(XMLConstants.RELAXNG_NS_URI);

Это позволяет мне использовать Jing для проверки XML-документа на соответствие схеме Compact RELAX NG. Полный пример ниже. Я не использовал мост или что-то еще. Путь к классам среды выполнения имеет только jing.jar (20091111) и собственный класс Validator.

import java.io.File;
import java.io.IOException;

import javax.xml.XMLConstants;
import javax.xml.transform.stream.StreamSource;
import javax.xml.validation.Schema;
import javax.xml.validation.SchemaFactory;
import javax.xml.validation.Validator;

import org.xml.sax.SAXException;

public class Validate
{

    public static void main(String[] args) throws SAXException, IOException
    {
        // Specify you want a factory for RELAX NG
        System.setProperty(SchemaFactory.class.getName() + ":" + XMLConstants.RELAXNG_NS_URI, "com.thaiopensource.relaxng.jaxp.CompactSyntaxSchemaFactory");
        SchemaFactory factory = SchemaFactory.newInstance(XMLConstants.RELAXNG_NS_URI);

        // Load the specific schema you want.
        // Here I load it from a java.io.File, but we could also use a
        // java.net.URL or a javax.xml.transform.Source
        File schemaLocation = new File(args[0]);

        // Compile the schema.
        Schema schema = factory.newSchema(schemaLocation);

        // Get a validator from the schema.
        Validator validator = schema.newValidator();

        for (int i = 1; i < args.length; i++)
        {
            String file = args[i];

            // Check the document
            try
            {
                validator.validate(new StreamSource(new File(file)));
                System.out.println(file + " is valid.");
            }
            catch (SAXException ex)
            {
                System.out.print(file + " is not valid because: " + ex.getMessage());
            }
        }
    }

}

Еще раз я протестировал только этот ион Java 1,6.

$ java -version
java version "1.6.0_01"
Java(TM) SE Runtime Environment (build 1.6.0_01-b06)
Java HotSpot(TM) Client VM (build 1.6.0_01-b06, mixed mode, sharing)
-121--2466041-

Вместо этого используйте each _ char :

"hello\nworld".each_char {|s| p s}

относительно того, почему он не работает, он работает в 1.8, но не 1.9.

10
ответ дан 29 November 2019 в 20:03
поделиться

Вы смотрите на документы для 1.8. Строка # каждый был удален в 1.9. Вместо этого используйте каждый_line.

3
ответ дан 29 November 2019 в 20:03
поделиться
Другие вопросы по тегам:

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