Используя структуру метаданных, которая является просто структурой, определенной во время компиляции, вы можете инкапсулировать определение структуры во время компиляции в значение, которое можно использовать для match
и для наследования.
#lang racket/base
(require
(for-syntax
racket/base
racket/struct-info
syntax/transformer)
racket/match)
(provide
(struct-out fish))
(struct fish (weight scales)
#:name private-fish
#:constructor-name private-fish)
(define (make-fish [weight 5] [scales 'blue])
(private-fish weight scales))
(begin-for-syntax
;; we define a struct that will only exist at compile time
;; and can encapsulate an identifier
(struct metadata (ctor struct-info)
#:property prop:procedure (struct-field-index ctor)
#:property prop:struct-info (lambda (self) (metadata-struct-info self))))
(define-syntax fish ;; this variable can be used like the initial struct when compiling
(metadata
(set!-transformer-procedure
(make-variable-like-transformer #'make-fish))
(extract-struct-info (syntax-local-value #'private-fish))))
Эта структура должна иметь определенные свойства: prop:procedure
, чтобы она все еще работала в качестве конструктора, и prop:struct-info
, чтобы match
и struct
могли извлекать информацию о структуре во время компиляции. [1110 ]
Обратите внимание, что в следующем выпуске Racket, благодаря пиару Алекса Кнаута, set!-transformer-procedure
больше не понадобится, и вам просто нужно позвонить make-variable-like-transformer
.
Это сообщение в блоге, кажется, имеет Ваш ответ: http://blog.capstrat.com/articles/facebook-share-thumbnail-image/
А именно, используйте тег как следующее:
<link rel="image_src"
type="image/jpeg"
href="http://www.domain.com/path/icon-facebook.gif" />
Название изображения должно совпасть с в примере.
Нажмите "Making Sure the Preview Works"
Примечание: Теги могут быть корректными, но Facebook только очищает каждые 24 часа, согласно их документации. Используйте страницу Facebook Lint для получения изображения в Facebook.