В чем разница между именованными свойствами и атрибутами в libxml-ruby?

В чем разница между

node.property("name")

а также

node.attributes["name"]

Согласно документации одно возвращает "значение именованного свойства", а другое "значение атрибута", но я не вижу никакой разницы.

Одна вещь, которая может играть некоторую роль - это пространства имен. Оба метода имеют свои установочные версии node.property("name")=value а также node.attributes["name"]=value и может быть разница в том, как они обрабатывают атрибуты пространства имен.

1 ответ

Решение

Свойство Node #, просмотр источника:

# File lib/libxml/properties.rb, line 5
def property(name)
  warn('Node#properties is deprecated.  Use Node#[] instead.')
  self[name]
end

Таким образом, ваш вопрос становится в чем разница между атрибутами Node#[] и Node #. Ответ заключается в том, что Node#[] возвращает один атрибут, а Node # attribute возвращает хеш, содержащий все атрибуты, что проще, чем извлекать их по одному за раз. Конечно, вы можете выполнить поиск любого хэша, написав ['some_key'] после хэша, например:

puts( 
  { a: 1, b: 2}[:b] 
)

Узел # [] - более эффективный способ поиска одного атрибута, потому что он не создает весь хеш первым.

Другие вопросы по тегам